コードは次のとおりです:
<?php$url = "http://zhidao.baidu.com/link?url=pTwcJotQ02pjg-mjCnc-fkw8ONOY9x8q0ESrCFhdVJy47agZnDnCb-BCAtngRGDt9yi0TvleSS_w0aPj8Vsk0atVkVhNYdZADN0kv0BzNau";echo fopen_url($url);function fopen_url($url) { if (function_exists('curl_init')) { $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, $url); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1); curl_setopt($curl_handle, CURLOPT_FAILONERROR,1); curl_setopt($curl_handle, CURLOPT_TIMEOUT,2); $file_content = curl_exec($curl_handle); $encode = mb_detect_encoding($file_content, array("ASCII","UTF-8","GB2312","GBK","BIG5")); if($encode != "UTF-8") { $file_content = mb_convert_encoding($file_content, "UTF-8", $encode); //$file_content = iconv($encode,'utf-8//IGNORE',$file_content); } curl_close($curl_handle); } else { $file_content = ''; } return $file_content; }?>
ディスカッションへの返信(解決策)
返されるデータには以下が含まれます:
それに基づいてページのエンコーディングを知ることができます
プログラミングのみが必要です利用できない場合 判定
mb_detect_encoding はよく間違えるので、mb_check_encoding 関数を追加しました
データ断片
不正な文字が存在する理由はありません
CP936 は GBK の国際名です
最初の問題はコード化けではなく、画像です。curl キャプチャ Baidu ページは、クロールを防ぐために特定のテキストを意図的に画像に変換します。 Web ページの要素を見てみると、これらの文字化けは、実は Baidu の画像アドレスであることがわかります。
2 番目の質問は、タイムアウトをより大きな値に設定するだけで問題ありません。ネットワークの問題である可能性があります。
最初の問題は文字化けではなく、画像です。curl が Baidu ページをクロールするとき、クロールを防ぐために特定のテキストを意図的に画像に変換します。 Web ページの要素を見てみると、これらの文字化けは、実は Baidu の画像アドレスであることがわかります。
2 番目の質問は、タイムアウトをより大きな値に設定するだけで問題ありません。ネットワークの問題である可能性があります。