Столкнулся с такой проблемой, что 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":"Япония"}]