PHP解析带BOM头的JSON数据,对接他人接口的时候,使用json

编程入门 行业动态 更新时间:2024-10-14 08:29:28

PHP解析带BOM头的JSON数据,对接他人<a href=https://www.elefans.com/category/jswz/34/1771365.html style=接口的时候,使用json"/>

PHP解析带BOM头的JSON数据,对接他人接口的时候,使用json

在php开发中会遇到和他人对接接口,对方使用json传输数据,使用json_decode()函数却无法将json数据转换为数组。

先看封装的代码

private function curlPost($url, $post_data = []) 
{$ch = curl_init() or die (curl_error());curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 360);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);$response = curl_exec($ch);$res = json_decode($response, true);return $res;
}

这种对接post接口的封装方法一般是没有问题的,但是我们打印$res的时候,会发现只会返回NULL。而打印$response的时候,是可以返回json字符串的。我们来看打印结果比对。

echo '<pre>';
var_dump($response);
var_dump($res);

打印结果

打印结果

 

换一种打印方式:

var_dump($response);

打印结果

将打印结果复制到json转换网站:JSON在线 | JSON解析格式化—SO JSON在线工具

却发现是可以转换的。

我尝试将两个结果进行比对。

$response = curl_exec($ch);
$json = '{"achievement":"76","p_score":89,"score":70}';
var_dump($json);
echo '<br/>';
var_dump($response);

比对结果:

会发现两个结果相差3个字符

出现这个问题的原因: 

我们的代码可能使用过window自带的编辑器进行编辑,它在保存一个UTF-8编码的代码文件的时候,会在文件头插入三个不可见的字符,分别是:0xEF 0xBB 0xBF,即BOM。对于一般的文件来说,不会产生问题,但是php因为不会忽略BOM,所以在调用这个php代码文件的时候,这三个字符也会跟着出现。

解决的方法:

加上下面的代码即可

if(substr($response,0,3) == pack("CCC",0xEF,0xBB,0xBF)) {$response = substr($response, 3);
}
private function curlPost($url, $post_data = array()) 
{$ch = curl_init() or die (curl_error());curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 360);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);$response = curl_exec($ch);if(substr($response,0,3) == pack("CCC",0xEF,0xBB,0xBF)) {$response = substr($response, 3);}$res = json_decode($response, true);return $res;
}

最后就可以将json字符串转换为数组。

更多推荐

PHP解析带BOM头的JSON数据,对接他人接口的时候,使用json

本文发布于:2023-11-17 13:21:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1642413.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接口   数据   BOM   PHP   json

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!