Функция 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() функций.
Комментариев нет:
Отправить комментарий