使用PHP获取远程Json乱码且转换数组失败

sange 3个月前 204

很久没有写代码了,写代码的速度也下降了不少,还要随时翻看文档,很多函数都记不得了!>_<

最近接了一个小单,完成一个小功能,客户提供了远程现成的接口,我只要使用PHP获取远程数据返回到客户端就行了,但是今天刚一开始就直接把我整郁闷了,具体看下面。

使用curl获取远程接口的数据,获取是成功的,因为JSON是字符串(通过gettype确定是string),直接输出到浏览器成功的,不过JSON是乱码的,当时没有多想,因为以前自己写接口的时候,并没有出现乱码的情况,所以从来没有遇到此类问题,当我使用json_decode函数将json转换成数组,用var_dump打印出来的结果是NULL,我蒙了,真的蒙了,完全不知道是怎么回事!

网上搜索了,转换方法倒是写了不少,唯独没有提到乱码会导致转换失败的情况,后来经过了自己三个多小时的折腾,终于知道导致转换失败的原因了。

  1. 远程接口编码是GBK的,而我的代码文件用的UTF-8,导致获取过来的数据乱码
  2. json_decode函数无法解码GBK格式的文字,只支持UTF-8
  3. 网上有得提到若文件有bom头也会导致转换失败,我没尝试,不清楚
  4. 有些网文提到数据中有多余的逗号也将导致转换失败,我觉得基本遇不到,若有多余逗号,说明JSON数据本身就有问题
  5. JSON数据中的字符串使用单引号包裹数据,需将单引号替换为双引号

针对1和2的解决办法只有一个,而且相当简单,只需要以下两个步骤就行了。

  • 首先使用iconv函数将数据从GBK转换到UTF-8
  • 其次使用json_decode函数就能成功将JSON转换成数组了

文中函数所在官方文档链接地址:

0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论
目前尚无回复