Дык, так это в PHP json_encode так работает, это же юникод последовательности.
Костыль: если у вас новый PHP (начиная с PHP 5.4.0.) найдите в фреймворке где используется json_encode и используйте json_encode($data, JSON_UNESCAPED_UNICODE);
Если PHP старый то можно использовать свой кодер:
public function to_json($data) {
if ($data === null) {
$data = [];
}
$isArray = true;
$keys = array_keys($data);
$prevKey = -1;
foreach ($keys as $key)
if (!is_numeric($key) || $prevKey + 1 != $key) {
$isArray = false;
break;
} else
$prevKey++;
unset($keys);
$items = array();
foreach ($data as $key => $value) {
$item = (!$isArray ? "\"$key\":" : '');
if (is_array($value))
$item .= $this->to_json($value);
elseif (is_null($value))
$item .= 'null';
elseif (is_bool($value))
$item .= $value ? 'true' : 'false';
elseif (is_string($value))
$item .= '"' . preg_replace('%([\\x00-\\x1f\\x22\\x5c])%e', 'sprintf("\\\\u%04X", ord("$1"))', $value) . '"';
elseif (is_numeric($value))
$item .= $value;
else
throw new Exception('Wrong argument.');
$items[] = $item;
}
return ($isArray ? '[' : '{') . implode(',', $items) . ($isArray ? ']' : '}');
}