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:// 打开会有乱码。  
 
 
posted @ 2018-01-27 00:30  大肥龙  阅读(352)  评论(0编辑  收藏  举报