要采集一个网站,目标站采用了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);   |