Как json_encode не кодировать в UNICODE
С версии PHP 5.4.0 для json_encode появился флаг JSON_UNESCAPED_UNICODE – Не кодировать многобайтные символы Unicode (по умолчанию они кодируются как \\uXXXX).
Теперь можно
$str = json_encode($arr, JSON_UNESCAPED_UNICODE);
Ранее обходился такой функцией
function jdecoder($json_str) {
$cyr_chars = array (
'\\u0430' => 'а', '\\u0410' => 'А',
'\\u0431' => 'б', '\\u0411' => 'Б',
'\\u0432' => 'в', '\\u0412' => 'В',
'\\u0433' => 'г', '\\u0413' => 'Г',
'\\u0434' => 'д', '\\u0414' => 'Д',
'\\u0435' => 'е', '\\u0415' => 'Е',
'\\u0451' => 'ё', '\\u0401' => 'Ё',
'\\u0436' => 'ж', '\\u0416' => 'Ж',
'\\u0437' => 'з', '\\u0417' => 'З',
'\\u0438' => 'и', '\\u0418' => 'И',
'\\u0439' => 'й', '\\u0419' => 'Й',
'\\u043a' => 'к', '\\u041a' => 'К',
'\\u043b' => 'л', '\\u041b' => 'Л',
'\\u043c' => 'м', '\\u041c' => 'М',
'\\u043d' => 'н', '\\u041d' => 'Н',
'\\u043e' => 'о', '\\u041e' => 'О',
'\\u043f' => 'п', '\\u041f' => 'П',
'\\u0440' => 'р', '\\u0420' => 'Р',
'\\u0441' => 'с', '\\u0421' => 'С',
'\\u0442' => 'т', '\\u0422' => 'Т',
'\\u0443' => 'у', '\\u0423' => 'У',
'\\u0444' => 'ф', '\\u0424' => 'Ф',
'\\u0445' => 'х', '\\u0425' => 'Х',
'\\u0446' => 'ц', '\\u0426' => 'Ц',
'\\u0447' => 'ч', '\\u0427' => 'Ч',
'\\u0448' => 'ш', '\\u0428' => 'Ш',
'\\u0449' => 'щ', '\\u0429' => 'Щ',
'\\u044a' => 'ъ', '\\u042a' => 'Ъ',
'\\u044b' => 'ы', '\\u042b' => 'Ы',
'\\u044c' => 'ь', '\\u042c' => 'Ь',
'\\u044d' => 'э', '\\u042d' => 'Э',
'\\u044e' => 'ю', '\\u042e' => 'Ю',
'\\u044f' => 'я', '\\u042f' => 'Я',
'\\u2116' => '№',
'\\r' => '',
'\\n' => '<br />',
'\\t' => ''
);
foreach ($cyr_chars as $key => $value) {
$json_str = str_replace($key, $value, $json_str);
}
return $json_str;
}