
о. придумал что делать.
всё же просто на самом деле...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//
// заплатка, устраняющая проблему неправильного написания русских символов
// в инпутных полях, при прозрачном фоне флэшки в хтмл
// (wmode="transparent")
//
TF.onChanged = function()
{
if (this.text.indexOf(chr(4)) == -1) {
return;
}
var broken:Array = this.text.split(chr(4));
var caretIndex:Number = Selection.getCaretIndex()-broken.length+1;
for (var i = 1; i<broken.length; i++) {
broken[i] = String.fromCharCode(1024+broken[i].charCodeAt(0))+broken[i].substr(1);
}
this.text = broken.join("");
Selection.setSelection(caretIndex,caretIndex);
};
// где TF - это ссылка на инпутное текстовое поле
проблема в том что двухбайтовый код символа (по UTF-8), пришедший с клавиатуры, флэш воспринимает как два символа по одному байту. баг. в результате этого вместо, к примеру, русского символа "А", c кодом 1040 (\u0410) мы видим два символа, с кодами 4 (\u0004) и 16 (\u0010). что есть косяк :)
надо любым удобным тебе способом отлавливать такие последовательности символов и делать из них один нормальный символ UTF-8.
данная заплатка будет работать только для символов, первый байт кода которых 04 (это символы начиная с кода 1024 и до кода 1280). т.е. на русские символы хватает с лихвой. плюс к этому я исхожу из того что символа с кодом 4 у тебя в тексте быть не может. что скорее всего так, ибо символ не печатный и вообще служебный.
делать универсальную заплатку для разных языков мне, честно говоря, лень. :) если кому не лень - пользуясь описанной закономерностью это вполне можно сделать.
эта заплатка будет работать только при неподключенном к текстовому полю шрифте.
эта заплатка из броузеров работает только в Internet Explorer'е,
но помогает также и в проекторах.
говорят, заплатка работает в Zinc.
в ruFlash пишут, что помогает и в mProjector.