Как читать азиатские символы (японский, китайский) после json_encode в PHP - PullRequest
0 голосов
/ 09 октября 2010

Я прочитал каждый пост на эту тему, но не думаю, что нашел ответ на свой вопрос, это сводит меня с ума.

У меня есть пара файлов php, один хранит данные в базе данных MySQL, другой читает эти данные: я получаю данные со всего мира, и мне кажется, что мне удается правильно хранить азиатские символы, но когда попробуйте прочитать эти данные, я не могу вернуть эти символы.

Как много других пользователей я получил ?? вместо правильных символов.

Лучшие мои PHP-файлы, которые я получил:

header('Content-Type: application/json; charset=utf-8');

тогда

mysql_query("SET CHARACTER SET utf8", $link);
mysql_query("SET NAMES 'utf8'", $link);

тогда

$fab[] = array_map(utf8_encode,$array);

Вот если бы я print_r ($fab) потерял азиатские символы: - (

Тогда, когда я это сделаю:

$json_string = json_encode($fab); //originale

Я получаю "??".

Как правильно вернуть правильные символы? Строка JSON затем передается клиенту iPhone.

Любое предложение или помощь будут ооочень признательны.

Все равно спасибо, Фабрицио

Ответы [ 2 ]

2 голосов
/ 09 октября 2010

Похоже, вы дважды его кодируете?Если вы получаете данные из mysql, который уже закодирован в utf8, какой смысл $fab[] = array_map(utf8_encode,$array); тогда?

Просто было то же самое 2 дня назад, когда я принимал данные utf8 из формы ExtJs, и они были испорченывверх.Это было потому, что я использовал utf8_encode для данных, которые я получил от сценария (который был в utf8).Так что я сломал его с помощью двойного кодирования.Может быть, то же самое в вашем случае

0 голосов
/ 14 октября 2010

Проблема заключалась в том, что сказал Ценг: двойное кодирование в массиве: я думал, что сделал правильный тест, но просто не сделал.

Так что единственный код, который мне нужен:while ($ obj = mysql_fetch_object ($ rs)) {$ arr [] = $ obj;}

$ json_string = json_encode ($ arr);echo ($ json_string);

Снова Ценг, спасибо.

...