我遇到了一个问题。我使用 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"]
我想要:
["é","é","é","é","é","é","é","é","é","é","é"]
最佳答案
您可以使用 json_encode
的 JSON_UNESCAPED_UNICODE
标志(自 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
值没有问题 - 它只是看起来更丑。
关于数据库上的 PHP json_encode utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509896/