我不知道发生了什么,但我在数组中有一个字符串。它必须是一个字符串,因为我先在它上面运行它:
$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',但我仍然无法解决该怎么做。
答案 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)));