我遇到了问题。我在数据库上传后使用json_encode
。我的文件也在utf8和我的数据库中。但是在我的数据库中有一些\u00e9
,我不知道为什么......
编辑:
有一个简单的代码:
$toast = array();
for($i=0;$i<11;$i++)
$toast[]='é';
$toast = json_encode($toast);
print utf8_decode($toast);
这不起作用如何打印一个充满'é'字符的简单数组...
编辑2:
此代码:
$toast = array();
for($i=0;$i<11;$i++)
$toast[]='é';
$toast = json_encode($toast);
print $toast;
输出:
["\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9"]
我想要:
["é","é","é","é","é","é","é","é","é","é","é"]
答案 0 :(得分:7)
您可以使用JSON_UNESCAPED_UNICODE
的 json_encode
标记(自PHP 5.4起可用):
$toast = json_encode($toast, JSON_UNESCAPED_UNICODE);
在PHP 5.4之前,您可以使用此代码段:
$toast = json_encode($toast);
$toast = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($matches) {return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UTF-16');}, $toast);
由于mb_convert_encoding()
并非在所有安装中都可用,您还可以使用这种肮脏的解决方法:
$toast = array_map('htmlentities', $toast);
$toast = json_encode($toast);
$toast = html_entity_decode($toast);
但是\uXXXX
值存在没有问题 - 它看起来更加丑陋。