了解 PHP/JSON 中的 \u0000 是什么并摆脱它

2022-08-30 22:58:16

我不知道发生了什么,但我在数组中有一个字符串。它必须是一个字符串,因为我首先在它上运行了这个:

$array[0] = (string)$array[0];

如果我以纯文本形式将$array[0]输出到浏览器,它会显示以下内容:

hellothere

但是如果我JSON编码$array我得到这个:

hello\u0000there

另外,我需要分离“there”部分(\u0000之后的位),但这不起作用:

explode('\u0000', $array[0]);

我甚至不知道\u0000是什么,也不知道如何在PHP中控制它。

我确实看到了这个链接:试图从我的json中找到并摆脱这个\u0000...这表明str_replacing生成的 JSON。我不能这样做(并且需要像上面提到的那样将其分开),所以我随后检查了Google的“php检查反斜杠\0字节”,但我仍然无法弄清楚该怎么做。


答案 1

\uXXXX是 JSON Unicode 转义符号(十六进制)。X

在这种情况下,它意味着ASCII字符,又名NUL字节,要拆分它,你可以做:0

explode('\u0000', json_encode($array[0]));

或者更好的是:

explode("\0", $array[0]); // PHP doesn't use the same notation as JSON

答案 2

您拥有的字符串是 ,或者您喜欢的任何字符串。如果是这样,则不会显示空符号,这就是为什么您会看到它,但会检测到它并像对任何其他特殊字符一样对其进行转义,这就是为什么它被替换为可见字符串的原因。"hello\0world""hello\x00world"echo\0helloworldjson_encode\u0000

在我看来,json正在完美地编码字符串,在那里以json编码的方式复制输入的字符串。您不必触摸其输出。如果你不希望在那里,你应该修复它的输入\u0000\u0000


推荐