Страницы

Поиск по вопросам

понедельник, 25 ноября 2019 г.

Кириллица в json_encode


Функция json_encode кириллицу utf-8 кодирует в виде \u..... Как её заставить  кодировать символы "как есть"?

Примечание: не используя второй параметр json_encode и mb-функции.
    


Ответы

Ответ 1



В PHP начиная с версии 5.4.0 появился флаг JSON_UNESCAPED_UNICODE и все стало намного проще: json_encode($array, JSON_UNESCAPED_UNICODE);

Ответ 2



Пришлось писать свою функцию. Надеюсь, не сильно накосячил? function normJsonStr($str){ $str = preg_replace_callback('/\\\\u([a-f0-9]{4})/i', create_function('$m', 'return chr(hexdec($m[1])-1072+224);'), $str); return iconv('cp1251', 'utf-8', $str); }

Ответ 3



Предположу, что данные идут с базы данных. В таком случае при подключении к баз данных необходимо указать кодировку подключения — UTF-8. "mysql:host=HOST;dbname=DBNAME;charset=utf8"

Ответ 4



в начале файла добавь header('Content-Type: application/json; charset=utf-8'); Указывать Content-Type свой, по ситуации

Ответ 5



Искал как решить проблему, в итоге заработало когда добавил к json_encode флаг JSON_UNESCAPED_UNICODE и сменил кодировку при выводе header('Content-Type: application/json; charset=utf-8');

Ответ 6



Никак. http://php.net/releases/NEWS_5_4_0_beta1.txt Improved JSON extension: . Added new json_encode() option JSON_UNESCAPED_UNICODE. FR #53946. (Alexander, Gwynne)

Ответ 7



Вот рекурсивная функция, которая может конвертировать в UTF-8 все строки в массиве и объекте: public function utf8ize($data) { if (is_array($data)) foreach ($data as $key => $value) $data[$key] = $this->utf8ize($value); else if(is_object($data)) foreach ($data as $key => $value) $data->$key = $this->utf8ize($value); else return utf8_encode($data); return $data; } Также json_last_error() может быть полезным в отладке json_encode()/json_encode() функций.

Комментариев нет:

Отправить комментарий