Любой способ вернуть PHP "кодирование json" с помощью кодирования UTF-8, а не Юникода?
Есть ли способ вернуть PHP json_encode
с кодировкой UTF-8, а не в Юникоде?
$arr=array('a'=>'á');
echo json_encode($arr);
mb_internal_encoding('UTF-8');
и $arr=array_map('utf8_encode',$arr);
не исправляет этого.
Результат: {"a":"\u00e1"}
Ожидаемый результат: {"a":"á"}
5 answers
{"a":"\u00e1"}
и {"a":"á"}
- это разные способы записи одного и того же документа JSON; Декодер JSON будет декодировать экранирование в юникоде.
В php 5.4+ в php json_encode
есть опция JSON_UNESCAPED_UNICODE
для простого вывода. В более старых версиях php вы можете развернуть свой собственный кодировщик JSON, который не кодирует символы, отличные от ASCII, или использовать кодировщик JSON Pear и удалить строки с 349 по 433.
Эта функция, найденная здесь , отлично работает для меня
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));
}
Я решил свою проблему, сделав это:
- Файл .php закодирован в ANSI. В этом файле есть функция для создания.файл json.
- Я использую
json_encode($array, JSON_UNESCAPED_UNICODE)
для кодирования данных;
Результатом является файл .json, закодированный в ANSI как UTF-8.
Используйте JSON_UNESCAPED_UNICODE
внутри json_encode()
, если ваша версия php>=5.4.
Просто используй это,
utf8_encode($string);
Вы должны заменить свой $arr
на $string
.
Я думаю, это сработает... попробуйте это.