Xpoint
   [напомнить пароль]

Кроссбраузерная передача русских букв Flash->JS

Метки: [без меток]
2006-06-16 03:25:34 [обр] Андрей Гора(0/29)[досье]

Передача осуществляется getURL("javascript:...")

Без кодировки:
IE - нормально
MZ - не передает вообще
Opera - крякозябры вар.1

С кодировкой escape->unescape
IE - крякозябры вар.2 (!)
MZ - нормально
Opera - крякозябры вар.2

На странице, куда передается текст, перепробованы кодировки:
charset=windows-1251
charset=utf-8

Как решить?

спустя 10 часов [обр] Давид Мзареулян(0/1003)[досье]
Не пользуйтесь escape/unescape, они не предназначены для букв вне ASCII-диапазона. Пользуйтесь encodeURIComponent/decodeURIComponent.
спустя 44 минуты [обр] Андрей Гора(0/29)[досье]

С escape/unescape и ASCII дела обстоят несколько не так, вот тут славно изложено Comparing escape(), encodeURI(), and encodeURIComponent().

А главное - в Action Script нет метода encodeURIComponent.

спустя 1 час 29 минут [обр] Алексей Полушин(0/231)[досье]
А покажите пример строчки c русскими буквами и результат escape из Action Script для нее.
спустя 22 минуты [обр] Андрей Гора(0/29)[досье]
Результаты для charset windows-1251 и utf-8 одинаковы.
Что это, кстати, за кодировки?
спустя 7 минут [обр] Алексей Полушин(0/231)[досье]
Не, я не это хотел. Вы что кодировали (исходное русское слово)? И что выдает escape БЕЗ unescape (%циферки).
спустя 14 минут [обр] Алексей Полушин(0/231)[досье]
Вообще-то вам уже дали ответ - надо использовать decodeURIComponent. escape в Action Script и decodeURIComponent в JS.
спустя 2 часа 49 минут [обр] Андрей Гора(0/29)[досье]

БЕЗ unescape: %D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0

Откуда Вы взяли encodeURIComponent() в ActionScript?
http://www.adobe.com/support/f......ripts/actionscript_dictionary/
http://livedocs.macromedia.com......elp/wwhimpl/js/html/wwhelp.htm
И простая проверка дает undefined.

спустя 19 часов [обр] Алексей Севрюков(1/1280)[досье]
Андрей Гора[досье]
escape в Action Script и decodeURIComponent в JS
спустя 1 час 46 минут [обр] Андрей Гора(0/29)[досье]

Точно. Спасибо.
Если напрямую подставить "%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0" в decodeURIComponent действительно возвращается "строка".

Но почему-то это не работает в связке с Flash.
Вот что я делаю:

Flash

str='строка';
esc=escape(str);
info.text=esc;
getURL("javascript:F_Message('"+str+"', '"+esc+"')");

// есть поле с динамическим текстом info

HTML

<script>
function F_Message(x,y){
   z=decodeURIComponent(y);
   alert("Source: \t\t\t"+x+"\nEscaped: \t\t\t"+y+"\ndecodeURIComponent: \t"+z);
}
</script>
<object type="application/x-shockwave-flash" data="1.swf" width="1050" height="400"> 
<param name="movie" value="1.swf">
 </object>

Во Flash переменная еще вида "%ХХ...", но в JS приходит совсем другая:

спустя 1 день 4 часа [обр] Давид Мзареулян(0/1003)[досье]
Я чего-то не понимаю. Если «строка» у Вас передаётся нормально, зачем Вы вообще заморачиваетесь с кодированием?
спустя 21 час [обр] Андрей Гора(0/29)[досье]
Для понимания см. первый пост. Речь идет об Opera.
Powered by POEM™ Engine Copyright © 2002-2005