zoukankan      html  css  js  c++  java
  • file_get_contents 抓取网页乱码。

    iconv

    string iconv ( string $in_charset , string $out_charset , string $str )

    mb_convert_encoding

    string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )

    试了两个编码转换函数都无法 解决。然后发现要是编码问题,至少要能看见HTML标签。所以不是编码的错。最后想到gzip。

    PHP已经自带了gzip解压函数 :

    gzdecode

    string gzdecode ( string $data [, int $length ] )
     
    在PHP版本5.4以上可用。

    PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码,如何解决gzip问题方法有两种:

    curl解决:

    复制代码
    function curl_get($url, $gzip=false){
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
            if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
            $content = curl_exec($curl);
            curl_close($curl);
            return $content;
    }
    复制代码

    采用gzip编码格式

    file_get_contents解决:

    file_get_contents("compress.zlib://".$url);

    无论页面是否经过gzip压缩,上述代码都可以正常工作!

    PHP 4.3.0以后版本支持,还可以用于fopen之类的函数~!

    解决方法:

    $url = 'http://m.weather.com.cn/data/101170101.html';
    
    echo '<pre>'; 
    
    print_r(file_get_contents("compress.zlib://".$url));//打开gzip压缩过的页面。 路径前不加compress.zlib:// 打开会有乱码。  
     
     
  • 相关阅读:
    软件设计师经验分享
    数据库设计基本规范
    UEditor上传文件的默认地址修改
    mongoDB简单介绍及安装
    链表中倒数第k个结点
    一入python深似海--对象的属性
    stl--vector 操作实现
    android5.x加入sim1,sim2标识
    leetCode 27.Remove Element (删除元素) 解题思路和方法
    java8新增特性(一)---Lambda表达式
  • 原文地址:https://www.cnblogs.com/gantoday/p/8362264.html
Copyright © 2011-2022 走看看