我不知道发生了什么,但我在数组中有一个字符串。它一定是一个字符串,因为我首先在上面运行了这个:
$array[0] = (string)$array[0];
如果我以纯文本形式将$array[0]输出到浏览器,它会显示以下内容:
hellothere
但如果我对$array进行JSON编码,我会得到:
hello'u0000there
此外,我需要分离"there"部分(''u0000之后的位),但这不起作用:
explode(''u0000', $array[0]);
我甚至不知道''u0000是什么,也不知道如何在PHP中控制它。
我确实看到了这个链接:试图从我的json中找到并删除这个''u0000…这建议str_replaceing生成的JSON。我不能做到这一点(需要像上面提到的那样先将其分离),所以我在谷歌上检查了"php反斜杠''0字节检查",但我仍然不知道该怎么办。
'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
您所拥有的字符串是"hello'0world"
或"hello'x00world"
,无论您喜欢什么。如果您echo
它,空符号'0
将不会显示,这就是为什么您会看到helloworld
,但json_encode
会检测到它并将其转义为任何其他特殊字符,这就是它被可见的'u0000
字符串取代的原因。
在我看来,json完美地编码了字符串,'u0000
在那里以json编码的方式复制输入的字符串。你不必触摸它的输出。如果您不希望'u0000
在那里,您应该修复其输入。
您可以简单地执行trim($str)
,而不必给它一个江湖骗子
万一有人需要它来应用于整个阵列
$data = (array)json_decode(str_replace(''u0000*'u0000', '', json_encode($data)));
'uXXXX
是unicode符号,代码为XXXX
(十六进制)。例如:http://msdn.microsoft.com/en-us/library/aa664669(v=vs.71).aspx
如果你真的得到了0000
,那么它只是代码为0
的字符
我今天遇到了这个问题,在将其发送回客户端之前,我将数组中的''u0000替换为",从而解决了这个问题。
echo str_replace('''u0000', "", json_encode($send));
在我的例子中,我在序列化的Laravel作业的有效负载json中找到了符号,类似于s:8:"'0*'0order";
(或s:8:"'u0000*'u0000order";
),这意味着序列化对象的属性order
在序列化的时刻具有可见性protected
尝试explode("'u0000", $array[0]);
,确保使用双引号。使用单引号,它将解析文本中的6个字符的值。
正如其他人所提到的,'u0000
是Unicode NUL字符。