有人能用json_编码和json_解码来解释这段PHP代码吗? $a='{“tag”:“}”; echo json_编码(json_解码($a));

有人能用json_编码和json_解码来解释这段PHP代码吗? $a='{“tag”:“}”; echo json_编码(json_解码($a));,php,json,Php,Json,这将产生: $a = '{ "tag": "<b></b>" }'; echo json_encode( json_decode($a) ); {“标记”:“} 当您认为它会准确地输出输入时。出于某种原因,json_encode添加了一个额外的斜杠。因为它是json标准的一部分 煤焦 任何Unicode字符- 除了-“-或-\-或- 控制字符 \" \\ \/这可能是一种安全功能。转义版本(例如输出)将被Javascript解析为与未转义版本类似的版本(例如

这将产生:

  $a = '{ "tag": "<b></b>" }';
  echo json_encode( json_decode($a) );
{“标记”:“}

当您认为它会准确地输出输入时。出于某种原因,json_encode添加了一个额外的斜杠。

因为它是json标准的一部分

煤焦

任何Unicode字符-
除了-“-或-\-或-
控制字符
\"
\\

\/这可能是一种安全功能。转义版本(例如输出)将被Javascript解析为与未转义版本类似的版本(例如,
\/
变为
/
)。这样跳过斜杠后,浏览器将Javascript字符串误解为HTML的可能性就小了。当然,如果您正确对待数据,就不需要这样做,因此它更能保护程序员不至于把事情弄糟。

您的输入不是有效的JSON,但PHP的JSON解析器(与大多数JSON解析器一样)无论如何都会对其进行解析。

使用以下方法:

any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/ <---- see here?
\b
\f
\n
\r
\t
\u four-hex-digits
结果将是:

echo json_encode($a,JSON_HEX_TAG)
您可以阅读本文来提高对JSON_编码的了解

你不能真的假设你的JSON字符串是正确的。我认为字符串之外的额外空白不应该存在。
echo json_encode($a,JSON_HEX_TAG)
["\u003C\u003E"]