PHP调用json_decode返回NULL,因JSON元素含特殊转义符如何解决?
问题原因
json_decode返回NULL的核心原因如下:
- 标准JSON规范仅支持
\u开头的Unicode转义序列,你当前使用的JSON字符串中包含\x3c、\x3e这类十六进制转义符,不符合JSON规范,直接触发解析失败。 - 你此前使用
stripslashes仅处理了转义双引号的问题,没有解决十六进制转义符的核心异常,所以依然无法正常解析。
解决方案
先通过正则替换把字符串内的十六进制转义符转换为对应实体字符,再执行JSON解析即可,可参考如下代码:
<?php $result = '{ "nid": 4872, "price": "£35.36", "salePrice": "£35.36", "discount": 0, "message": "\x3cdiv class=\"ajax-cart-status\"\x3eThe current price has been updated.\x3c/div\x3e" }'; // 处理\x开头的十六进制转义符 $result = preg_replace_callback('/\\\\x([0-9a-fA-F]{2})/', function($matches) { return chr(hexdec($matches[1])); }, $result); $arr1 = json_decode($result, true); $arr2 = ['text' => 'text2']; $arr1 = array_merge($arr1,$arr2); echo json_encode($arr1); ?>
内容的提问来源于stack exchange,提问作者User-15895
相关产品推荐
相关产品推荐

