Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > json_encode косячит русский текст на UTF-8


Автор: Rooner 6.12.2012, 20:42
Почему json_encode косячит русские символы?
Кодировка везде указана UTF-8:
В php.ini стоит default_charset = "utf-8"
В хэдэре стоит <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
В .htaccess стоит adddefaultcharset utf-8
В подключении к БД стоит mysql_query("SET NAMES 'UTF8'");
Сами файлы имеют кодировку UTF-8 буз DOM смотрел через NotePad++
Ну и в браузере кодировка определяется как UTF-8
Из этого
Код

    echo json_encode('<div class="err">Заполните поле "Полный текст"</div>');

Получается это
Код

    "
    \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \"\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\"<\/div>"

Автор: Guedda 6.12.2012, 20:52
Попробуй вторым параметром JSON_UNESCAPED_UNICODE
так как очень похоже, что у тебя по умолчанию JSON_HEX_TAG

Автор: Arantir 6.12.2012, 20:53
Цитата(Rooner @  6.12.2012,  19:42 Найти цитируемый пост)
В подключении к БД стоит mysql_query("SET NAMES 'UTF8'");

Может попробовать дефис в названии кодировки поставить? Ну... мало ли =)

Нет, все же в БД она без дефиса.

Автор: Rooner 6.12.2012, 21:07
Guedda, попробовал так
Код

echo json_encode($text, JSON_UNESCAPED_UNICODE), "\n";
echo json_encode($text, JSON_UNESCAPED_UNICODE);


пишет:
Код

Warning: json_encode() expects parameter 2 to be long, string given in Z:\home\steklomag\www\test.php on line 6


Я использую ajax. Можно ли просто декодировать возвращенные данные в js коде? Т.е. Получил строку в виде:
Код

"\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u043e\u043b\u0435 \"\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\"<\/div>"

И как ее теперь декодировать в js коде?
Вот так не работает:
Код

alert(json_decode(res));

Автор: Sanchezzz 6.12.2012, 21:15
JSON.parse( );

Автор: Arantir 6.12.2012, 21:16
JSON_UNESCAPED_UNICODE появился только в php 5.4.0. У вас, наверное, ~5.3.

Автор: Rooner 6.12.2012, 21:17
Sanchezzz, отлично, спасибо, то что надо.

Добавлено через 20 секунд
Arantir, от оно чо, ок

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)