Rumah pembangunan bahagian belakang tutorial php php file_get_contents抓取Gzip网页乱码的三种解决方法

php file_get_contents抓取Gzip网页乱码的三种解决方法

Jun 20, 2016 pm 01:01 PM
Pengoptimuman laman web

用 file_get_contents() 函数抓取网页会发生乱码现象。有两个原因会导致乱码,一个是编码问题,一个是目标页面开了Gzip,下面说的就是开了Gzip功能如何才能不乱码的方法

把抓取到的内容转下编码即可($content=iconv("GBK", "UTF-8//IGNORE", $content);),我们这里讨论的是如何抓取开了Gzip的页面。怎么判断呢?获取的头部当中有Content-Encoding: gzip说明内容是GZIP压缩的。用FireBug看一下就知道页面开了gzip没有。下面是用firebug查看我的博客的头信息,Gzip是开了的。
请求头信息原始头信息
 

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie __utma=225240837.787252530.1317310581.1335406161.1335411401.1537; __utmz=225240837.1326850415.887.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=%E4%BB%BB%E4%BD%95%E9%A1%B9%E7%9B%AE%E9%83%BD%E4%B8%8D%E4%BC%9A%E9%82%A3%E4%B9%88%E7%AE%80%E5%8D%95%20site%3Awww.nowamagic.net; PHPSESSID=888mj4425p8s0m7s0frre3ovc7; __utmc=225240837; __utmb=225240837.1.10.1335411401
Host www.nowamagic.net
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Salin selepas log masuk


下面介绍一些解决方案:

1. 使用自带的zlib库
如果服务器已经装了zlib库,用下面的代码可以轻易解决乱码问题。

$data = file_get_contents("compress.zlib://".$url);
Salin selepas log masuk

2. 使用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;
}
Salin selepas log masuk

3. 使用gzip解压函数

function gzdecode($data) { 
  $len = strlen($data); 
  if ($len < 18 || strcmp(substr($data,0,2),"\x1f\x8b")) { 
    return null;  // Not GZIP format (See RFC 1952) 
  } 
  $method = ord(substr($data,2,1));  // Compression method 
  $flags  = ord(substr($data,3,1));  // Flags 
  if ($flags & 31 != $flags) { 
    // Reserved bits are set -- NOT ALLOWED by RFC 1952 
    return null; 
  } 
  // NOTE: $mtime may be negative (PHP integer limitations) 
  $mtime = unpack("V", substr($data,4,4)); 
  $mtime = $mtime[1]; 
  $xfl   = substr($data,8,1); 
  $os    = substr($data,8,1); 
  $headerlen = 10; 
  $extralen  = 0; 
  $extra     = ""; 
  if ($flags & 4) { 
    // 2-byte length prefixed EXTRA data in header 
    if ($len - $headerlen - 2 < 8) { 
      return false;    // Invalid format 
    } 
    $extralen = unpack("v",substr($data,8,2)); 
    $extralen = $extralen[1]; 
    if ($len - $headerlen - 2 - $extralen < 8) { 
      return false;    // Invalid format 
    } 
    $extra = substr($data,10,$extralen); 
    $headerlen += 2 + $extralen; 
  }



  $filenamelen = 0; 
  $filename = ""; 
  if ($flags & 8) { 
    // C-style string file NAME data in header 
    if ($len - $headerlen - 1 < 8) { 
      return false;    // Invalid format 
    } 
    $filenamelen = strpos(substr($data,8+$extralen),chr(0)); 
    if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) { 
      return false;    // Invalid format 
    } 
    $filename = substr($data,$headerlen,$filenamelen); 
    $headerlen += $filenamelen + 1; 
  }

  $commentlen = 0; 
  $comment = ""; 
  if ($flags & 16) { 
    // C-style string COMMENT data in header 
    if ($len - $headerlen - 1 < 8) { 
      return false;    // Invalid format 
    } 
    $commentlen = strpos(substr($data,8+$extralen+$filenamelen),chr(0)); 
    if ($commentlen === false || $len - $headerlen - $commentlen - 1 < 8) { 
      return false;    // Invalid header format 
    } 
    $comment = substr($data,$headerlen,$commentlen); 
    $headerlen += $commentlen + 1; 
  }

  $headercrc = ""; 
  if ($flags & 1) { 
    // 2-bytes (lowest order) of CRC32 on header present 
    if ($len - $headerlen - 2 < 8) { 
      return false;    // Invalid format 
    } 
    $calccrc = crc32(substr($data,0,$headerlen)) & 0xffff; 
    $headercrc = unpack("v", substr($data,$headerlen,2)); 
    $headercrc = $headercrc[1]; 
    if ($headercrc != $calccrc) { 
      return false;    // Bad header CRC 
    } 
    $headerlen += 2; 
  }

  // GZIP FOOTER - These be negative due to PHP's limitations 
  $datacrc = unpack("V",substr($data,-8,4)); 
  $datacrc = $datacrc[1]; 
  $isize = unpack("V",substr($data,-4)); 
  $isize = $isize[1];

  // Perform the decompression: 
  $bodylen = $len-$headerlen-8; 
  if ($bodylen < 1) { 
    // This should never happen - IMPLEMENTATION BUG! 
    return null; 
  } 
  $body = substr($data,$headerlen,$bodylen); 
  $data = ""; 
  if ($bodylen > 0) { 
    switch ($method) { 
      case 8: 
        // Currently the only supported compression method: 
        $data = gzinflate($body); 
        break; 
      default: 
        // Unknown compression method 
        return false; 
    } 
  } else { 
    // I'm not sure if zero-byte body content is allowed. 
    // Allow it for now...  Do nothing... 
  }

  // Verifiy decompressed size and CRC32: 
  // NOTE: This may fail with large data sizes depending on how 
  //       PHP's integer limitations affect strlen() since $isize 
  //       may be negative for large sizes. 
  if ($isize != strlen($data) || crc32($data) != $datacrc) { 
    // Bad format!  Length or CRC doesn't match! 
    return false; 
  } 
  return $data; 
}
Salin selepas log masuk


使用:

$html=file_get_contents('http://www.jb51.net/');
$html=gzdecode($html);
Salin selepas log masuk


就介绍这三个方法,应该能解决大部分gzip引起的抓取乱码问题了。


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan PHP untuk membangunkan cache untuk meningkatkan pengalaman pengguna tapak web Cara menggunakan PHP untuk membangunkan cache untuk meningkatkan pengalaman pengguna tapak web Nov 07, 2023 pm 04:18 PM

Cara menggunakan PHP untuk membangunkan cache untuk meningkatkan pengalaman pengguna laman web Ringkasan: Caching adalah salah satu cara penting untuk meningkatkan pengalaman pengguna dalam pembangunan laman web. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan cache untuk meningkatkan kelajuan tindak balas tapak web dan mengurangkan beban pelayan. Khususnya, ia termasuk caching halaman, caching data dan caching sumber statik, dan contoh kod yang sepadan diberikan. Pengenalan Dengan perkembangan pesat Internet, pengguna mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk laman web. Laman web yang pantas dan responsif memainkan peranan penting dalam meningkatkan pengalaman pengguna. Cache adalah untuk mencapai ini

Cara menggunakan Panel Pagoda untuk pengoptimuman laman web dan SEO Cara menggunakan Panel Pagoda untuk pengoptimuman laman web dan SEO Jun 21, 2023 am 09:07 AM

Dengan perkembangan pesat Internet, laman web menjadi lebih penting kepada perniagaan dan individu Untuk menarik lebih banyak trafik dan meningkatkan pengalaman pengguna, pengoptimuman laman web dan SEO telah menjadi bahagian yang sangat diperlukan. Dalam hal ini, Panel Pagoda adalah alat yang sangat berguna yang boleh dengan mudah menjalankan pengoptimuman laman web dan SEO. Berikut akan memperkenalkan secara terperinci cara menggunakan Panel Pagoda untuk pengoptimuman laman web dan SEO. 1. Pasang panel Pagoda Jika anda belum memasang panel Pagoda, anda boleh memuat turunnya dari laman web rasmi Pagoda (https://www.bt.cn/).

Konfigurasi algoritma pengimbangan beban Nginx untuk mengoptimumkan pengedaran perkhidmatan tapak web dengan cekap Konfigurasi algoritma pengimbangan beban Nginx untuk mengoptimumkan pengedaran perkhidmatan tapak web dengan cekap Jul 04, 2023 pm 08:10 PM

Konfigurasi algoritma pengimbangan beban Nginx, pengoptimuman pengedaran perkhidmatan tapak web yang cekap Gambaran Keseluruhan: Dalam aplikasi web berskala besar, untuk meningkatkan toleransi kesalahan dan kebolehskalaan sistem, pengimbangan beban biasanya digunakan untuk mengedarkan permintaan rangkaian. Sebagai pelayan proksi terbalik berprestasi tinggi, Nginx mempunyai fungsi pengimbangan beban yang berkuasa dan boleh mengedarkan permintaan mengikut strategi algoritma yang berbeza. Artikel ini akan memperkenalkan konfigurasi algoritma pengimbangan beban Nginx dan memberikan contoh kod yang sepadan. 1. Pengenalan kepada algoritma pengimbangan beban Nginx menyediakan pelbagai algoritma pengimbangan beban

Kajian mendalam tentang kepentingan kod status HTTP 301 dalam pengoptimuman tapak web Kajian mendalam tentang kepentingan kod status HTTP 301 dalam pengoptimuman tapak web Feb 19, 2024 pm 08:01 PM

Menyelam Lebih Dalam ke Kod Status HTTP 301: Mengapa Ia Penting dalam Pengoptimuman Laman Web Dalam dunia internet, prestasi laman web dan pengalaman pengguna adalah penting. Sebagai sebahagian daripada pengoptimuman tapak web, adalah penting untuk memahami peranan kod status HTTP. Salah satu kod status yang paling penting ialah 301, juga dikenali sebagai ubah hala kekal. Artikel ini akan meneroka maksud kod status HTTP 301 dan menerangkan sebab ia penting dalam pengoptimuman tapak web. Kod status HTTP ialah kod digital yang dikembalikan oleh pelayan kepada klien. Kod ini menyampaikan kepada pelanggan

Elemen utama untuk mengoptimumkan prestasi tapak web didedahkan: Bagaimana menggunakan analisis penunjuk untuk meningkatkan pengalaman pengguna? Elemen utama untuk mengoptimumkan prestasi tapak web didedahkan: Bagaimana menggunakan analisis penunjuk untuk meningkatkan pengalaman pengguna? Feb 02, 2024 pm 06:36 PM

Penjelasan terperinci tentang penunjuk utama untuk mengoptimumkan prestasi tapak web: Bagaimana untuk meningkatkan pengalaman pengguna tapak web anda melalui analisis penunjuk? Dengan perkembangan pesat Internet, laman web telah menjadi saluran penting bagi perusahaan untuk memaparkan imej jenama mereka dan menyediakan produk dan perkhidmatan. Walau bagaimanapun, apabila keperluan pengguna untuk pengalaman dalam talian terus meningkat, kepentingan prestasi tapak web telah menjadi semakin menonjol. Mengoptimumkan prestasi tapak web bukan sahaja boleh meningkatkan pengalaman pengguna, tetapi juga meningkatkan kelekatan pengguna dan kadar penukaran. Artikel ini akan memperkenalkan secara terperinci penunjuk utama untuk mengoptimumkan prestasi tapak web dan menerangkan cara meningkatkan pengalaman pengguna tapak web anda melalui analisis penunjuk. satu

Kaedah pengoptimuman untuk meningkatkan prestasi dan kelajuan laman web Kaedah pengoptimuman untuk meningkatkan prestasi dan kelajuan laman web Feb 03, 2024 am 08:22 AM

Bagaimana untuk meningkatkan prestasi dan kelajuan laman web melalui pengoptimuman Dengan perkembangan pesat Internet, laman web telah menjadi saluran penting untuk promosi korporat, jualan produk dan pertukaran maklumat. Walau bagaimanapun, apabila jangkaan pengguna telah meningkat lebih tinggi, prestasi dan kelajuan laman web telah menjadi penunjuk penting pengalaman pengguna. Tapak web dengan prestasi yang baik dan kelajuan pemuatan yang pantas boleh meningkatkan kepuasan pengguna, meningkatkan kadar penukaran dan meningkatkan kedudukan enjin carian. Di bawah ini kami akan meneroka secara terperinci cara meningkatkan prestasi dan kelajuan tapak web anda melalui pengoptimuman. Memampatkan dan mengoptimumkan imej: Imej sering mengambil sebahagian besar masa muat halaman web

Optimumkan tapak web anda dan hapuskan ralat JavaScript Optimumkan tapak web anda dan hapuskan ralat JavaScript Apr 09, 2024 pm 03:09 PM

Ralat JavaScript boleh menjejaskan prestasi tapak web. Untuk membetulkan ralat ini: gunakan alat pembangunan web untuk melihat ralat. Semak kesan ralat untuk maklumat ralat terperinci. Semak sama ada pembolehubah dalam kod anda dimulakan atau mempunyai nilai. Gunakan analisis statik untuk mencari masalah sintaks dan logik. Dayakan pengendalian ralat untuk memberikan mesej ralat mesra. Pantau tapak web untuk mengesan ralat berterusan.

Kepentingan teknologi caching PHP dalam pengoptimuman laman web Kepentingan teknologi caching PHP dalam pengoptimuman laman web Jun 19, 2023 pm 06:46 PM

Sebagai bahasa pengaturcaraan yang sangat popular, PHP digunakan secara meluas dalam pembangunan laman web. Walau bagaimanapun, disebabkan oleh kelemahan PHP itu sendiri, ia mempunyai kelemahan tertentu dalam prestasi. Sebagai contoh, PHP perlu menghuraikan dan menyusun setiap permintaan, yang akan menyebabkan tapak web bertindak balas dengan perlahan dan menjejaskan pengalaman pengguna. Oleh itu, untuk menyelesaikan masalah ini, teknologi caching PHP telah wujud. Teknologi caching PHP ialah pengoptimuman untuk proses penghuraian dan penyusunan dalam penterjemah PHP Intipatinya adalah untuk cache skrip PHP yang telah dihuraikan dan disusun.

See all articles