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

时间:2011-07-21 06:08:14

标签: php unicode json

是否可以使用UTF-8编码返回PHP json_encode而不是Unicode?

$arr=array('a'=>'á');
echo json_encode($arr);

mb_internal_encoding('UTF-8');$arr=array_map('utf8_encode',$arr);无法解决此问题。

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

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

5 个答案:

答案 0 :(得分:75)

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

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

答案 1 :(得分:30)

此功能找到here,对我来说很好用

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));
}

答案 2 :(得分:27)

我解决了这个问题:

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

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

答案 3 :(得分:7)

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

答案 4 :(得分:-4)

只需使用它,

utf8_encode($string);

您已将$arr替换为$string

我认为它会起作用...试试这个。