json_decode转换json数据为null

时间:2022-10-26 13:54:33

经常使用json_decode()转换json字符串,一直都很顺利,然而今天碰到了一个头疼的问题,json字符串转换过之后一直为null
上网搜索了下,可以使用json_last_error()函数来查看json转换最后发生的错误,json_last_error_msg()用来显示最后发生的错误详情。可以分别参考json_last_errorjson_last_error_msg
一般错误都是为4,意思是编码错误。因为json_decode()只能够转换UTF-8编码的json字符串。
然而,我的错误显示是3控制字符错误,可能是编码不对
尝试过以下方法:

一: json 字符串中反斜杠被转义,使用 htmlspecialchars_decode() 函数处理;
二:在保存 json 数据时使用 urlencode() 函数;(因为json数据不是在我这边控制的,而且将得到的json保存为文本再转换是没问题的,故没验证该方法)
三:将编码转换为UTF-8$content = mb_detect_encoding($json, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));       //查看编码
$json= mb_convert_encoding($content tent , "UTF-8", "GBK");                //将字符串转为UTF-8
四:在文件头加
五:查找文件中是否存在`bom`,如果存在也会出现该问题;
六:检查json字符串中是否多逗号;
七:检查json中的名称和值是否用的是双引号,在json里只能用双引号表示字符串,不要用单引号;
八:检查json中的值是否有数字类型的,并且首位为零;(这个貌似没问题)
九:字符的表示方式方式有很多种,但下面的都不支持 ,如:`\x06` ,可以将这些字符换为空,如:

json=strreplace("\x06","", json);

因为php也支持这种十六进制方式,所以可以用eval来达到转义效果。

我的问题是因为使用了AES进行加密、解密,所以可能这个过程中出现了问题,最后把不支持的字符去掉就OK了。这个还是在overstockflow上找到的。

Author:leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/70210770