php file_get_contents抓取Gzip网页乱码的三种解决方法
用 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
下面介绍一些解决方案:
1. 使用自带的zlib库
如果服务器已经装了zlib库,用下面的代码可以轻易解决乱码问题。
$data = file_get_contents("compress.zlib://".$url);
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; }
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; }
使用:
$html=file_get_contents('http://www.jb51.net/'); $html=gzdecode($html);
就介绍这三个方法,应该能解决大部分gzip引起的抓取乱码问题了。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Comment utiliser PHP pour développer le cache afin d'améliorer l'expérience utilisateur du site Web Résumé : La mise en cache est l'un des moyens importants pour améliorer l'expérience utilisateur dans le développement de sites Web. Cet article explique comment utiliser PHP pour développer le cache afin d'améliorer la vitesse de réponse du site Web et de réduire la charge du serveur. Plus précisément, il inclut la mise en cache des pages, la mise en cache des données et la mise en cache des ressources statiques, et des exemples de code correspondants sont donnés. Introduction Avec le développement rapide d'Internet, les utilisateurs ont des exigences de plus en plus élevées en matière de sites Web. Un site Web rapide et réactif joue un rôle essentiel dans l’amélioration de l’expérience utilisateur. Le cache est pour y parvenir

Avec le développement rapide d’Internet, les sites Web deviennent de plus en plus importants pour les entreprises et les particuliers. Afin d’attirer plus de trafic et d’améliorer l’expérience utilisateur, l’optimisation des sites Web et le référencement sont devenus des éléments indispensables. À cet égard, le Pagoda Panel est un outil très utile qui peut facilement effectuer l'optimisation et le référencement de sites Web. Ce qui suit présentera en détail comment utiliser le Pagoda Panel pour l'optimisation et le référencement de sites Web. 1. Installez le panneau Pagoda Si vous n'avez pas installé le panneau Pagoda, vous pouvez le télécharger depuis le site officiel de Pagoda (https://www.bt.cn/).

Configuration de l'algorithme d'équilibrage de charge Nginx, optimisation efficace de la distribution des services de site Web Présentation : Dans les applications Web à grande échelle, afin d'augmenter la tolérance aux pannes et l'évolutivité du système, l'équilibrage de charge est généralement utilisé pour distribuer les demandes réseau. En tant que serveur proxy inverse hautes performances, Nginx dispose d'une puissante fonction d'équilibrage de charge et peut distribuer les requêtes selon différentes stratégies d'algorithme. Cet article présentera la configuration de l'algorithme d'équilibrage de charge de Nginx et donnera des exemples de code correspondants. 1. Introduction aux algorithmes d'équilibrage de charge Nginx fournit une variété d'algorithmes d'équilibrage de charge

Une plongée approfondie dans le code d'état HTTP 301 : pourquoi c'est important dans l'optimisation de sites Web Dans le monde d'Internet, les performances des sites Web et l'expérience utilisateur sont cruciales. Dans le cadre de l’optimisation d’un site Web, il est crucial de comprendre le rôle des codes d’état HTTP. L’un des codes d’état les plus importants est le 301, également appelé redirection permanente. Cet article explorera la signification du code d'état HTTP 301 et expliquera pourquoi il est crucial dans l'optimisation d'un site Web. Le code d'état HTTP est un code numérique renvoyé par le serveur au client. Ces codes communiquent au client le

Comment améliorer les performances et la vitesse d'un site Web grâce à l'optimisation Avec le développement rapide d'Internet, les sites Web sont devenus un canal important pour la promotion des entreprises, la vente de produits et l'échange d'informations. Cependant, à mesure que les attentes des utilisateurs sont devenues plus élevées, les performances et la vitesse des sites Web sont devenues des indicateurs importants de l’expérience utilisateur. Un site Web offrant de bonnes performances et des vitesses de chargement rapides peut améliorer la satisfaction des utilisateurs, augmenter les taux de conversion et améliorer le classement des moteurs de recherche. Ci-dessous, nous explorerons en détail comment améliorer les performances et la vitesse de votre site Web grâce à l'optimisation. Compresser et optimiser les images : les images occupent souvent la majorité du temps de chargement des pages Web.

Les erreurs JavaScript peuvent affecter les performances du site Web. Afin de corriger ces erreurs : utilisez les outils de développement web pour visualiser les erreurs. Vérifiez la trace des erreurs pour obtenir des informations détaillées sur les erreurs. Vérifiez si les variables de votre code sont initialisées ou ont des valeurs. Utilisez l'analyse statique pour détecter les problèmes de syntaxe et de logique. Activez la gestion des erreurs pour fournir des messages d’erreur conviviaux. Surveillez le site Web pour détecter les erreurs persistantes.

Explication détaillée des indicateurs clés pour optimiser les performances d'un site Web : Comment améliorer l'expérience utilisateur de votre site Web grâce à l'analyse des indicateurs ? Avec le développement rapide d’Internet, les sites Web sont devenus un canal important permettant aux entreprises d’afficher leur image de marque et de proposer des produits et services. Cependant, à mesure que les exigences des utilisateurs en matière d'expérience en ligne continuent d'augmenter, l'importance de la performance du site Web est devenue de plus en plus importante. L'optimisation des performances du site Web peut non seulement améliorer l'expérience utilisateur, mais également augmenter la fidélité des utilisateurs et le taux de conversion. Cet article présentera en détail les indicateurs clés pour optimiser les performances d'un site Web et expliquera comment améliorer l'expérience utilisateur de votre site Web grâce à l'analyse des indicateurs. un

En tant que langage de programmation très populaire, PHP est largement utilisé dans le développement de sites Web. Cependant, en raison des défauts de PHP lui-même, il présente certains défauts de performances. Par exemple, PHP doit analyser et compiler chaque requête, ce qui entraînera une réponse lente du site Web et affectera l'expérience utilisateur. Par conséquent, afin de résoudre ce problème, la technologie de mise en cache PHP a vu le jour. La technologie de mise en cache PHP est une optimisation du processus d'analyse et de compilation dans l'interpréteur PHP. Son essence est de mettre en cache les scripts PHP qui ont été analysés et compilés.
