php的json_decode()返回NULL的解决方法

关于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了。

本文由 有花不见叶 原创发布于光阴小栈,未经许可,禁止转载。

共有 0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据