В документации AS3 говорится, что строки в AS3 находятся в формате UTF-16.
В Flash Clip есть текстовое поле, где пользователь может вводить некоторые данные.
Когда нажимается кнопка, я хочу, чтобы эти данные были отправлены на php-скрипт.
У меня все настроено, но кажется, что PHP-скрипт получает данные в формате UTF-16. Данные в базе данных (которая является utf-8) показывают некоторые неузнаваемые символы (где используются специальные символы), что означает, что данные не были отправлены в правильной кодировке.
var variables:URLVariables=new URLVariables; var varSend:URLRequest=new URLRequest("http://website.com/systematic/accept.php"); varSend.method=URLRequestMethod.POST; varSend.data=variables; var varLoader:URLLoader=new URLLoader; varLoader.dataFormat=URLLoaderDataFormat.VARIABLES; varLoader.addEventListener(Event.COMPLETE, completeHandler);
Когда кнопка отправки нажата, выполняется следующий обработчик.
function sendData(event:MouseEvent) : void { // i guess here is the problem (tbName.text is UTF-16) variables.name = tbName.text; varLoader.load(varSend); }
Есть ли способ отправить данные, чтобы PHP-скрипт получал данные в формате UTF-8?
(PHP-скрипт извлекает значение с помощью $ _POST ['name']).
EDIT (после полезных комментариев):
Я попытался преобразовать переменную POST в UTF-8 с помощью iconv (), но я получаю только вопросительные знаки. Это может означать, что я ошибался, предполагая, что php получил строку в формате UTF-16. Кажется, нет. Но теперь я понятия не имею, как это исправить.
Символы, о которых идет речь, являются хорватскими персонажами (č, ć, š, ž и đ), все они находятся в кодировке Windows-1250. Если я вручную отредактирую запись в phpMyAdmin и введите любой из этих символов, все будет отлично. Но если я делаю это через вспышку, это не сработает.
Еще одна странная вещь: я удалил значок и поместил все, как было в начале, и теперь только неспешные персонажи появляются до первого хорвата. Например, если я пишу «ačasdfadfa», в базе данных сохраняется только «a».
Другое редактирование:
Теперь я попытался переключить хорватских символов на что-то ASCII (см. Код ниже), а затем вернуть их на č, ć и т. Д. На стороне PHP. Flash явно перенаправляет это право (поскольку больше нет специальных символов), но PHP неправильно преобразовывает символы обратно в строку. Это то, что я делал.
http://pastebin.com/qjVcrNuV
поэтому я предполагаю, что это что-то с PHP или как он хранит данные в базе данных. Сам файл PHP кодируется в кодировке UTF-8.
Обновить:
Если это действительно данные UTF-16, которые вы получаете от Flash, вы могли бы как быстро исправить попытку преобразования ввода в PHP:
$name = iconv("UTF-16", "UTF-8", $_POST["name"]);
вы можете попробовать это и проверить, будут ли данные выглядят нормально. однако, если это вообще возможно, я бы сказал, что было бы предпочтительнее получить Flash для отправки данных UTF-8.
Старый ответ:
<speculation>
Это не похоже на UTF-16 для меня, но больше похоже на данные UTF-8, отображаемые в кодированной среде ISO-8859-1. Где вы выводите переменные? Является ли страница, на которой выполняется вывод в кодировке UTF-8? (См. Меню браузера «Кодирование»). Если бы мне пришлось делать ставки, я бы сказал, что Flash передает их правильно как UTF-8, но проблема на выходе.
</speculation>
если появляются вопросительные знаки, вероятно, PHP разглашает это неправильно, а не мигает.
Я помещаю этот файл .htaccess (для php5) в базовый каталог сайтов, на которых я работаю на японском языке, или сайты со специальными символами … он решает 99% проблем с PHP, но вам все равно нужно контролировать входные строки (я все еще привыкший к этому сам)
<IfModule mod_php5.c> php_flag output_buffering Off php_value output_handler none php_value default_charset UTF-8 php_value mbstring.language japanese php_flag mbstring.encoding_translation On php_value mbstring.http_input auto php_value mbstring.http_output UTF-8 php_value mbstring.internal_encoding UTF-8 php_value mbstring.substitute_character none </IfModule>