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:// 打开会有乱码。