JSON-curl请求返回数据头部多了三个字节

发布于 2016-11-15 22:35:28 字数 699 浏览 1498 评论 1

我用curl向服务端发送post请求,服务端处理数据,并用json_encode()处理返回,而我对返回数据进行json_decode()时,发现始终没效果,最后经过抓包工具抓包,解析数据,发现在返回数据的头部多了三个BOM字节,这是怎么回事?
我的解决方法

        $ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_POST , 1);
curl_setopt($ch , CURLOPT_POSTFIELDS , $data);
curl_setopt($ch , CURLOPT_RETURNTRANSFER , 1);

$response = curl_exec($ch);
curl_close($ch);
//找到第一个{开始截取
$response = **substr($response,stripos($response , '{'));**
$response = json_decode($response , true);

return $response;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜柠檬 2017-05-20 06:32:14

原因大体就是服务器返回的Content-Encoding的值和网页的编码不同,造成curl解码出问题,直接将gzip或deflate编码的文件下载了,所以看起来是乱码了。
Content-Encoding: gzip
读取前几个字节为:1F 8B 08 ,其中1F 8B表明为gzip压缩,而08表示为deflate压缩。
这样实际编码和通过Content-Encoding获取的编码不一样,所以curl解码出错,导致下载的是未解码的页面,也就是一堆乱码。

看这篇文章Curl 采集乱码 gzip 原因及解决方案 utf-8

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文