PHP 在前端传回一组json数据格式时json_decode解析不出来
问题描述:前端传回一个json格式,后端接受后json_decode为空白
代码如下:
$search= htmlspecialchars($_GET['$json']);
$json=json_decode($search);
原因:htmlspecialchars()函数把json格式的引号都一起转义了,所以json_decode报错。
解决办法:参考官方htmlspecialchars函数提供的参数,如下:
常量名称
描述
ENT_COMPAT
会转换双引号,不转换单引号。
ENT_QUOTES
既转换双引号也转换单引号。
ENT_NOQUOTES
单/双引号都不转换
ENT_IGNORE
静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响。
ENT_SUBSTITUTE
替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 � (其他),而不是返回空字符串。
ENT_DISALLOWED
为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 �(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。
ENT_HTML401
以 HTML 4.01 处理代码。
ENT_XML1
以 XML 1 处理代码。
ENT_XHTML
以 XHTML 处理代码。
ENT_HTML5
以 HTML 5 处理代码。
综上,我们可以这样写:
$search= htmlspecialchars($_GET['$json'],ENT_NOQUOTES);
$json=json_decode($search);