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

时间:2013-07-06 05:21:25

标签: php json

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

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

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

hellothere

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

hello\u0000there

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

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

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

我确实看到了这个链接:Trying to find and get rid of this \u0000 from my json ...这表明str_replacing生成的JSON。我不能那样做(并且需要先将上面提到的那个分开),所以我检查了Google的'php check for backslash \ 0 byte',但我仍然无法解决该怎么做。

8 个答案:

答案 0 :(得分:9)

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

在这种情况下,它表示0 ASCII字符,也就是NUL字节,可以将其拆分:

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

或者更好:

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

答案 1 :(得分:9)

您拥有的字符串为"hello\0world""hello\x00world",无论您喜欢什么。如果你echo它,则不会显示空符号\0,这就是为什么你会看到helloworld,但json_encode会检测到它并将其转义为任何其他特殊字符,这就是为什么它被一个可见的\u0000字符串取代。

在我看到它的方式中,json正在完美地编码字符串,\u0000用于以json编码的方式再现输入的字符串。您不必触摸其输出。如果你不想要\u0000那么你应该修改它的输入

答案 2 :(得分:9)

你可以简单地做trim($str)而不给它一个名单

答案 3 :(得分:2)

\uXXXX是具有代码XXXX(十六进制)的unicode符号。 例如:http://msdn.microsoft.com/en-us/library/aa664669(v=vs.71).aspx

如果你真的得到0000 - 那么它只是代码为0的字符

答案 4 :(得分:2)

今天我遇到了这个问题,我用""替换了我的数组中的\ u0000。然后再将其发回客户端。

echo str_replace('\\u0000', "", json_encode($send));

答案 5 :(得分:0)

尝试explode("\u0000", $array[0]);,确保使用双引号。使用单引号,它将解析文字6字符值。

正如其他人所提到的,\u0000是Unicode NUL字符。

答案 6 :(得分:0)

在我的情况下,我在序列化的Laravel作业的有效负载json中找到了符号,类似s:8:"\0*\0order";(或s:8:"\u0000*\u0000order";),这意味着序列化对象的属性order具有可见性{{1 }}进行序列化

答案 7 :(得分:0)

以防万一有人需要它应用于整个数组

$data = (array)json_decode(str_replace('\u0000*\u0000', '', json_encode($data)));