php curl函数采集网页出现gzip压缩、编码不同导致的乱码 图文解决方法

curl乱码有两个方面的原因一个是因为我们采集页面的php页面编码与远程文档编码不致导致的,另一种可能是页面进入了gzip压缩传输导致的,那么我们要如何解决这些问题呢?

 

[title]gzip压缩传输导致乱码[/title]

今天在采集京东的时候发现返回的数据是乱码,网上说可能和压缩有关,看了一下京东的头信息的确进行gzip加密,好吧,那就解压吧

$return = gzdecode($return); //将return的字符进行解码

另一种解决办法

curl_setopt($ch, CURLOPT_ENCODING, 'gzip');

[title]页面编码问题[/title]

mb_convert_encoding($str, 'utf-8', 'GBK,UTF-8,ASCII');

[title]完整代码示例[/title]

// curl 伪造agent抓取页面
function http_get($URL,$key='baidu') { 
    $agent = Flight::get('flight.spider_agent')[$key];
    if( !$agent ){
        return false;
    }
    $c = curl_init(); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_USERAGENT, $agent);
    curl_setopt($c, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));
    curl_setopt($c, CURLOPT_ENCODING, 'gzip,deflate');//这个是解释gzip内容.................
    curl_setopt($c, CURLOPT_URL, $URL); 
    curl_setopt($c, CURLOPT_TIMEOUT,2);
    $contents = curl_exec($c); 
    $contents = mb_convert_encoding($contents, 'utf-8', 'GBK,UTF-8,ASCII');
    $httpCode = curl_getinfo($c,CURLINFO_HTTP_CODE); 
    curl_close($c);
    return ['data'=>$contents,'http_code'=>$httpCode];
}

 

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr月付$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快注册即送$50点击购买】!

腾讯云爆款1C1G云服务器首年99元

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

发表评论

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