php无法使用字符串反斜杠解码Json

时间:2019-05-24 09:13:51

标签: php

字符串{"foo":"\\"}是有效的json,但似乎php无法json对其进行解码。

在php中运行以下内容:

php > $a = '{"foo":"\\"}';
php > var_dump(json_decode($a));
php shell code:1:
NULL
php > var_dump(json_last_error_msg());
php shell code:1:
string(53) "Control character error, possibly incorrectly encoded"

这是怎么回事?

2 个答案:

答案 0 :(得分:4)

{"foo":"\\"}确实是有效的JSON,但是在php中,要拥有此字符串,您需要先转义\

$a = '{"foo":"\\\\"}';
var_dump($a);
echo "-------" . PHP_EOL;
var_dump(json_decode($a));

输出

string(12) "{"foo":"\\"}"
-------
object(stdClass)#1 (1) {
  ["foo"]=>
  string(1) "\"
}

答案 1 :(得分:2)

您需要对反斜杠进行转义,因为PHP字符串解析器正在将其作为转义进行处理。

$a = '{"foo":"\\\\"}';

但是正确的解决方案是使用json_encode()

$a = json_encode(["foo": '\\']);

请注意,我必须在该文字中使用反斜杠。