Любой способ вернуть PHP `json_encode` с кодировкой UTF-8, а не Unicode?
Любой способ вернуть PHP json_encode
с кодировкой UTF-8, а не Unicode?
$arr=array('a'=>'á');
echo json_encode($arr);
mb_internal_encoding('UTF-8');
и $arr=array_map('utf8_encode',$arr);
не исправляет его.
Результат: {"a":"\u00e1"}
Ожидаемый результат: {"a":"á"}
Ответы
Ответ 1
{"a":"\u00e1"}
и {"a":"á"}
- это разные способы записи одного и того же документа JSON; Декодер JSON будет декодировать escape-код unicode.
В php 5.4+ php json_encode
имеет параметр JSON_UNESCAPED_UNICODE
для простого вывода. В более старых версиях PHP вы можете развернуть свой собственный JSON-кодер, который не кодирует символы, отличные от ASCII, или используйте Pear's JSON encoder и удалите строку 349 до 433.
Ответ 2
Эта функция найдена здесь, отлично работает для меня
function jsonRemoveUnicodeSequences($struct) {
return preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}
Ответ 3
Я решил решить эту проблему:
- Файл .php закодирован в ANSI. В этом файле есть функция для создания файла .json.
- Я использую
json_encode($array, JSON_UNESCAPED_UNICODE)
для кодирования данных;
Результатом является файл .json, закодированный в ANSI как UTF-8.
Ответ 4
Используйте JSON_UNESCAPED_UNICODE
внутри json_encode()
, если ваша версия php >= 5.4.
Ответ 5
просто используйте это,
utf8_encode($string);
вы должны заменить $arr
на $string
.
Я думаю, что это сработает... попробуйте это.