当使用"特殊"Unicode字符时,它们在编码为JSON时会变成奇怪的垃圾:
php > echo json_encode(['foo' => '?']);
{"foo":"\u99ac"}
Run Code Online (Sandbox Code Playgroud)
为什么?我的编码错了吗?
(这是一个一劳永逸地澄清这个话题的参考问题,因为这一次又出现了.)
我有一个简单的 PHP 一维数组。
当我执行 var dump ( echo var_dump($a)) 时,我将其作为输出:
array(3) { [0]=> string(3) "?" [1]=> string(21) "exhausted||to exhaust" [2]=> string(4) "jin3" }
Run Code Online (Sandbox Code Playgroud)
但是,当我对它进行 json_encode ( echo json_encode($a)) 时,我得到了这个:
["\u5c3d","exhausted||to exhaust","jin3"]
Run Code Online (Sandbox Code Playgroud)
它返回的十六进制值是正确的,但我不知道如何阻止它给我十六进制。我只是想让它显示字符。
如果我echo mb_internal_encoding()返回 UTF-8,这就是我设置的。我在所有字符串操作中都非常小心地使用 mb_ 函数,因此没有任何数据被弄乱。
我知道我可以编写一个修改过的 json_encode 函数来解决这个问题。但我想知道这里发生了什么。