Вызов скрипта Php с переменными UTF-8 POST - PullRequest
0 голосов
/ 08 июня 2010

Документация AS3 гласит, что строки в AS3 имеют формат UTF-16.

На Flash-клипе есть текстовое поле, в котором пользователь может вводить некоторые данные.

При нажатии кнопки,Я хочу, чтобы эти данные были отправлены в 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 и введу любой из этих символов, все отлично работает.Но если я делаю это через flash, это не сработает.

Еще одна странная вещь: я удалил iconv и поместил все так, как было в начале, и теперь только не специальные символы отображаются первымихорватский.Например, если я напишу «ačasdfadfa», в базе данных будет храниться только «a».


Другое редактирование:

Я попыталсяпереключите хорватские символы во что-то ASCII (см. код ниже), а затем верните их в č, ć и т. д. на стороне PHP.Очевидно, что Flash перенаправляет это право (поскольку больше нет специальных символов), но PHP неправильно преобразовывает символы обратно в строку.Это то, что я делал.

http://pastebin.com/qjVcrNuV

, поэтому я думаю, что это что-то с PHP или как он хранит данные в базе данных.Сам файл PHP имеет кодировку UTF-8.

Ответы [ 2 ]

0 голосов
/ 09 августа 2011

, если появляются вопросительные знаки, вероятно, 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>
0 голосов
/ 08 июня 2010

Обновление:

Если это действительно данные 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>

...