ホームページ >バックエンド開発 >PHPチュートリアル >文字化けしたWebページを取得するcurlとfile_get_contentsの解決策 filegetcontents timeout js file get content wp file get content
今日、curl_init 関数を使用して Sohu の Web ページをクロールしたところ、収集された Web ページが文字化けしていることがわかりました。分析の結果、サーバーが gzip 圧縮機能をオンにしていることがわかりました。 gzip を解析するために関数curl_setopt に複数のオプション CURLOPT_ENCODING を追加するだけで、正しくデコードできます。
また、キャプチャされた Web ページが GBK でエンコードされているが、スクリプトが実際には utf-8 でエンコードされている場合、キャプチャされた Web ページは関数 mb_convert_encoding を使用して変換する必要があります。
$tmp = sys_get_temp_dir();
$cookieDump = tempnam($tmp, 'cookies');
$url = 'http://tv.sohu.com';
$ch =curl_init() ;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,1);//返されたヘッダー領域の内容を表示
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1)//自動ジャンプを使用する
curl_setopt ($ch, CURLOPT_TIMEOUT, 10); // タイムアウト制限を設定します
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) // 取得された情報はファイル ストリームの形式で返されます
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10); //リンクタイムアウト制限
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));//httpヘッダ情報を設定
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');// gzip デコードオプションを追加します。Web ページで gzip が有効になっていない場合でも問題ありません
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookieDump) // Cookie 情報を保存するファイルの名前
$content =curl_exec($) ch);
// GBK を UTF-8 に変換してキャプチャした Web ページを配置します
$content = mb_convert_encoding($content,"UTF-8","GBK");
?>
$url = 'http://tv.sohu.com' ;
// compress.zlib オプションを追加するだけで、サーバーで gzip 圧縮が有効になっている場合でもデコードできます
$content = file_get_contents("compress.zlib:// ".$url);
// キャプチャした Web ページを取得 GBK から UTF-8 に変換します
$content = mb_convert_encoding($content,"UTF-8","GBK");
?>
原文: http ://woqilin.blogspot.com/2014/05/curl-filegetcontents.html
上記では、file_get_contents のコンテンツを含む、curl と file_get_contents が文字化けした Web ページを取得するための解決策を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。