任何方式返回PHP ' json_encode '与编码UTF-8而不是Unicode


Any way to return PHP `json_encode` with encode UTF-8 and not 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":"á"}

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

在php 5.4+中,php的json_encode确实具有用于纯输出的JSON_UNESCAPED_UNICODE选项。在旧的php版本中,您可以推出自己的不编码非ascii字符的JSON编码器,或者使用Pear的JSON编码器并删除第349至433行。

我这样解决了我的问题:

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

结果是一个。json文件编码为ANSI作为UTF-8。

这个函数在这里找到,对我来说很好

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版本>=5.4,则在json_encode()中使用JSON_UNESCAPED_UNICODE

就用这个,

utf8_encode($string);

你必须把你的$arr换成$string

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