昨天晚上群里有朋友采集网页时发现file_get_contents 获得的网页保存到本地为乱码响应的header 里 ContentEncoding:gzip
但在浏览器里看是正常的
因为我有过相关经验马上发现是网站开启了gzip而file_get_contents 获得的是压缩过的页面而不是解压过的页面(不知道是不是要file_get_conttents 请求网页时带上相应的参数直接获得没有被gzip压缩过的网页?)
刚好我前不久刚看到可以用读取文件的前个字节判断文件类型群里面的朋友也说gzip压缩过的网页(gbk编码)前字节是 F B 于是就可以判断网页是否gzip压缩过
代码如下
复制代码 代码如下:
//米尔军事网采用 gzip压缩网页
//file_get_contents 直接获得的网页是乱码
header(ContentType:text/html;charset=utf );
$url = ;
$file = fopen($url "rb");
//只读字节 如果为(进制)f b (进制) 则开启了gzip ;
$bin = fread($file );
fclose($file);
$strInfo = @unpack("Cchars" $bin);
$typeCode = intval($strInfo[chars]$strInfo[chars]);
$isGzip = ;
switch ($typeCode)
{
case :
//网站开启了gzip
$isGzip = ;
break;
default:
$isGzip = ;
}
$url = $isGzip ? "compresszlib://"$url:$url; // 三元表达式
$mierHtml = file_get_contents($url); //获得米尔军事网数据
$mierHtml = iconv("gbk""utf"$mierHtml);
echo $mierHtml;