php网页抓取乱码(一个问题用file_get_contents抓取网页的解决方法)
优采云 发布时间: 2021-11-21 01:25php网页抓取乱码(一个问题用file_get_contents抓取网页的解决方法)
今天我正在编写一个程序来抓取其他人的网页。以前,公司需要一些功能,但是今天我在抓取网页时发现了一个问题。我用file_get_contents抓取网页,发现了如截图所示的乱码情况。
所以使用转码
$contents = iconv("gb2312", "utf-8//IGNORE",$contents);
即使之前遇到过乱码,我也遇到过网页编码的问题。html标签不会有问题,问题还没解决。
所以我在网上找到了
原因:据说得到的头信息中有Content-Encoding:gzip,说明内容是GZIP压缩的
然后我尝试抓取我的博客,发现可以正常抓取,而且header信息中还收录Content-Encoding:gzip。不清楚为什么会出现这种情况,稍后我会解决。
下面我推荐2个解决方案:
①、服务器安装zlib库
$contents = file_get_contents("compress.zlib://".$url);
②. 使用 CURL 而不是 file_get_contents
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;
}
既然问题已经解决了,继续下面的过程
QQ交流群:136351212