要采集一个网站,目标站采用了gzip压缩传输网页,本来应该只要发送一个http头 Accept-Encoding: identity或者干脆不发送这个头等,就可以使目标站返回没有经过gzip压缩的页面了,不过很不幸,目标站无视客户端的请求,仍然返回gzip数据,造成乱码。   
其实php对gzip解压很简单,用内置的gzdecode函数就可以了,不过很可惜我配置了半天也无法支持gzdecode函数,所以只好变通一下:  
 
    
        
            | 以下为引用的内容:      if (!function_exists('gzdecode')) { function gzdecode ($data) {
 $flags = ord(substr($data, 3, 1));
 $headerlen = 10;
 $extralen = 0;
 $filenamelen = 0;
 if ($flags & 4) {
 $extralen = unpack('v' ,substr($data, 10, 2));
 $extralen = $extralen[1];
 $headerlen += 2 + $extralen;
 }
 if ($flags & 8) // Filename
 $headerlen = strpos($data, chr(0), $headerlen) + 1;
 if ($flags & 16) // Comment
 $headerlen = strpos($data, chr(0), $headerlen) + 1;
 if ($flags & 2) // CRC at end of file
 $headerlen += 2;
 $unpacked = @gzinflate(substr($data, $headerlen));
 if ($unpacked === FALSE)
 $unpacked = $data;
 return $unpacked;
 }
 }
 | 
    
  
调用方法很简单: 
 
    
        
            | 以下为引用的内容:     $f=@file_get_contents("http://www.itlearner.com"); echo gzdecode($f);
 | 
    
延伸阅读:告诉你如何关闭GZIP,多种程序方法文件压缩成Gzip格式的类使用mod_gzip加速你的html页面PHP使用zlib扩展实现页面GZIP压缩输出