当JSON包含HTML实体时json_decode返回NULL该如何处理
问题根因
json_decode 只能解析语法合规的标准JSON字符串,你提供的字符串中双引号、尖括号等符号都被转义为了HTML实体(比如"对应双引号、<对应小于号),不符合JSON语法要求,因此解析失败返回NULL。
你可以调用json_last_error_msg()查看具体错误,该场景下一般会返回 Syntax error。
解决步骤
- 第一步:用
html_entity_decode函数将HTML实体还原为原始字符,得到标准JSON字符串 - 第二步:对还原后的字符串调用
json_decode完成解析 - 可选:如果业务需要保留内容中的HTML实体编码,解析完成后可单独对目标字段调用
htmlspecialchars处理
正确代码示例
$json = '{ "text": "<ul> <li><strong>'"Example Text"'</strong></li>" }'; // 解码HTML实体,ENT_QUOTES表示同时解码单/双引号实体,指定UTF-8编码避免乱码 $standardJson = html_entity_decode($json, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); $data = json_decode($standardJson, true); var_dump($data);
注意事项
- 必须传入
ENT_QUOTES参数,否则JSON结构里的双引号实体不会被还原,仍然会报语法错误 - 显式指定UTF-8编码,避免包含非ASCII字符时出现乱码导致解析失败
内容的提问来源于stack exchange,提问作者gidiwe2427
相关产品推荐
相关产品推荐

