2
  $a = '{ "tag": "<b></b>" }';
  echo json_encode( json_decode($a) );

这输出:

{"tag":"<b><\/b>"}

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

4

4 回答 4

18

因为它是 JSON 标准的一部分

http://json.org/

字符

any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/ <---- see here?
\b
\f
\n
\r
\t
\u four-hex-digits
于 2008-09-24T15:14:27.673 回答
3

用这个:

echo json_encode($a,JSON_HEX_TAG)

结果将是:

["\u003C\u003E"]

你可以阅读这篇文章来提高你对 JSON_ENCODE 的知识 http://php.net/manual/en/function.json-encode.php

于 2018-01-08T10:41:24.397 回答
2

这可能是一个安全功能。转义版本(例如输出)将被 Javascript 解析为类似于未转义版本(例如\/变成/)。像这样逃脱了斜线后,浏览器将 Javascript 字符串误解为 HTML 的可能性较小。当然,如果您正确处理数据,则不需要这样做,因此它更多的是防止笨拙的程序员为自己搞砸事情。

于 2008-09-24T15:16:32.393 回答
2

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

于 2008-09-24T22:10:05.723 回答