关于php的json_decode()返回NULL这个问题有很多情况,这里只是针对其中的一种情况来说。
问题
使用json_decode()对 thinkPHP返回的JSON 格式的字符串进行解码,但是始终无法转换成功,打印数据为null。
特别纳闷的一件事就是,我另外单独使用原生PHP做了一个测试,返回相同的JSON数据,但是可以解码。文本对比之后,数据代码是一模一样!(这里给大家推荐一个在线文本对比工具:传送门)
问题截图
正常的json数据,可以进行解码
不正常的json数据,解码返回null
解决
其实仔细观察之后,json数据确实是一模一样,唯一的区别就是string类型的长度,出问题的json数据是长度多了三个。于是,使用urlencode()函数转字符串为编码,看到字符串开头有3个字符\xEF\xBB\xBF, 是bom头隐藏在里面。
正常的字符:
存在bom头的字符:
找到问题根源所在之后,出现的问题也就迎刃而解,使用$content = trim($content, “\xEF\xBB\xBF”);来转化一下,将多余出来的bom头去掉,json_decode就可以正常解码,不再返回null了。
本文由 有花不见叶 原创发布于光阴小栈,未经许可,禁止转载。