json_encode с содержимым mysql и умлаутс в utf-8 - PullRequest
4 голосов
/ 06 мая 2010

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

Основная проблема в том, что Умлауты / Особые Знаки ... не работают. Я думаю, что все устали от этих вопросов, но все решения, найденные в Интернете, похоже, не работают.

У меня есть содержимое utf-8 в базе данных utf-8 Mysql. Я чувствую, что проблема где-то в соединении с базой данных, но я просто не могу понять.

character_set_client utf8
character_set_connection utf8
набор символов_символов utf8
символьный_системный бинарный файл
character_set_results utf8
character_set_server latin1
character_set_system utf8

Я не уверен, что проблема в том, что latin1 для character_set_server, потому что я не в этом mysql материале. Я также не знаю, как изменить, потому что я не могу получить доступ к файлам конфигурации сервера MySQL.

Что бы меня не смущало, если я получу результаты из базы данных и выведу их на экран, print_r даст правильный результат.

ini_set('default_charset','utf-8');
header('Content-Type: text/plain; > charset=utf-8');

Firefox говорит, что кодировка char - это utf-8, но если при выводе:

print_r($listnew);
echo json_encode($listnew[5]);

print_r дает все правильно, но json_encode работает неправильно.

print_r:

[5] => Array (
       [id] => 5
       [data] => U-Bahnhof Theresienstraße
       [size] => 17
)

json_encode:

{"id": 5, "data": "U-Bahnhof Theresienstra \ u00dfe", "size": 17}

я знаю, что json_encode нужна строка utf-8 для правильной работы там, и я чувствую, что у меня проблемы с кодированием, но я просто не могу понять, где она.

Любая помощь будет оценена,

заранее спасибо.

i3

1 Ответ

5 голосов
/ 06 мая 2010

Ммм ... Я думаю, что на самом деле это правильный способ. \u00df является правильным представлением Unicode ß. Когда вы json_decode() вернете его обратно, оно снова станет ß.

Где это создает вам проблемы? Получающая сторона не декодирует это должным образом? Следует, если вы используете стандартные функции json_*.

Все примеры в руководстве показывают одно и то же - символы вне диапазона ASCII превращаются в числовые последовательности.

...