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

use*_*356 13 php json

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

$array[0] = (string)$array[0];
Run Code Online (Sandbox Code Playgroud)

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

hellothere
Run Code Online (Sandbox Code Playgroud)

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

hello\u0000there
Run Code Online (Sandbox Code Playgroud)

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

explode('\u0000', $array[0]);
Run Code Online (Sandbox Code Playgroud)

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

我确实看到了这个链接:试图从我的json中找到并摆脱这个\ u0000 ...这表明str_replacing生成的JSON.我不能这样做(并且需要先将上面提到的它分开)所以我然后检查了Google的'php check for backslash\0 byte'但我仍然无法解决该怎么做.

Ali*_*xel 9

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

在这种情况下,它意味着0ASCII字符,也就是NUL字节,可以分割它,你可以这样做:

explode('\u0000', json_encode($array[0]));
Run Code Online (Sandbox Code Playgroud)

或者更好的是:

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


Hav*_*ard 9

你拥有的字符串"hello\0world",或者"hello\x00world"你喜欢的任何字符串.如果你echo这样做,那么\0就不会显示空符号,这就是为什么你会看到它helloworld,但json_encode会检测它并将其转义为任何其他特殊字符,这就是它被可见\u0000字符串替换的原因.

在我看待它的方式中,json正在完美地编码字符串,\u0000就是以json编码的方式完成再现输入字符串的工作.您不必触摸其输出.如果你不想那样\u0000,你应该修改它的输入.


roy*_*roy 9

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