Столкнулся с такой проблемой, что json_encode при кодировании символов кириллицы преобразует её в 16-тиричный вид.
Например, массив вида:
Array( [0] => Array( [id] => 5 [name] => Россия ) [1] => Array( [id] => 16 [name] => Китай ) [2] => Array( [id] => 23 [name] => Япония ) )
после обработки функцией json_encode, принимает вид:
"[{"id":"5","name":"\u0412\u0438\u043a\u0442\u043e\u0440\u0438\u044f"},{"id":"16","name":"\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f"},{"id":"23","name":"\u041a\u0438\u043d\u0441\u043b\u0435\u043d\u0434"}]"
Вроде ничего страшного, но данные в таком виде расходуют лишний трафик, что особенно критично если вам нужно быстро обрабатывать ajax запросы
Для приведения строк к нормальному виду, есть следующее решение:
preg_replace_callback( '/\\\u([0-9a-fA-F]{4})/', create_function('$match', 'return mb_convert_encoding("&#" . intval($match[1], 16) . ";", "UTF-8", "HTML-ENTITIES");'), json_encode($region_list) )
В результате получим следующий json:
[{"id":"5","name":"Россия"},{"id":"16","name":"Китай"},{"id":"23","name":"Япония"}]
Волшебная константа во втором параметре дает тот же эффект.
Странно что инфы мало по этому поводу. Нашел что это новая фишка в PHP 5.4
json_encode(«привет, мир!»,JSON_UNESCAPED_UNICODE)
предполагал что вторым параметром должно что то такое передаваться, перерыл все маны, но для php 5.2 так и не нашел.
спасибо
Сергей, огромное спасибо! Весь день сегодня убил на поиски проблемы думал что с кодировкой беда. А беда была в JSONе)