有没有办法返回PHP`json_encode`编码UTF-8而不是Unicode?

Bin*_*min 43 php unicode json

有没有办法返回PHP json_encode编码UTF-8而不是Unicode?

$arr=array('a'=>'á');
echo json_encode($arr);
Run Code Online (Sandbox Code Playgroud)

mb_internal_encoding('UTF-8');$arr=array_map('utf8_encode',$arr);没有解决它.

结果: {"a":"\u00e1"}

预期结果: {"a":"á"}

phi*_*hag 79

{"a":"\u00e1"}并且{"a":"á"}是编写相同JSON文档的不同方法; JSON解码器将解码unicode转义.

在php 5.4+中,php json_encode确实有JSON_UNESCAPED_UNICODE普通输出选项.在较旧的php版本中,您可以推出自己的不编码非ASCII字符 JSON编码器,或者使用Pear的 JSON编码器并删除349到433行.


ant*_*iom 31

这个功能在这里找到,对我来说很好

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));
}
Run Code Online (Sandbox Code Playgroud)

  • @Binyamin,是的,但不是每个人都运行php 5.4 (8认同)
  • `/ e`为`preg_replace()`是[*在PHP 5.5.x中弃用*](http://php.net/manual/en/migration55.deprecated.php). (2认同)

小智 27

我这样解决了我的问题:

  • .php文件编码为ANSI.在此文件中是创建.json文件的函数.
  • json_encode($array, JSON_UNESCAPED_UNICODE)用来编码数据;

结果是.json文件编码为ANSI为UTF-8.


Lak*_*tra 7

如果您的php版本> = 5.4,请JSON_UNESCAPED_UNICODE 在内部使用json_encode().