$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
这输出:
{"tag":"<b><\/b>"}
当您认为它会准确输出输入时。出于某种原因 json_encode 添加了一个额外的斜杠。
因为它是 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)
结果将是:
["\u003C\u003E"]
你可以阅读这篇文章来提高你对 JSON_ENCODE 的知识 http://php.net/manual/en/function.json-encode.php
这可能是一个安全功能。转义版本(例如输出)将被 Javascript 解析为类似于未转义版本(例如\/
变成/
)。像这样逃脱了斜线后,浏览器将 Javascript 字符串误解为 HTML 的可能性较小。当然,如果您正确处理数据,则不需要这样做,因此它更多的是防止笨拙的程序员为自己搞砸事情。
您的输入不是有效的 JSON,但 PHP 的 JSON 解析器(像大多数 JSON 解析器一样)无论如何都会解析它。