ホームページ > バックエンド開発 > PHPチュートリアル > curl_init によって返されるエンコーディングを判断するにはどうすればよいですか?文字化け問題を文字単位で解決

curl_init によって返されるエンコーディングを判断するにはどうすればよいですか?文字化け問題を文字単位で解決

WBOY
リリース: 2016-06-13 12:27:03
オリジナル
1172 人が閲覧しました

curl_init によって返されるエンコーディングを判断するにはどうすればよいですか?文字化けを解決してください!
コードは次のとおりです:

<br /><?php<br />$url = "http://zhidao.baidu.com/link?url=pTwcJotQ02pjg-mjCnc-fkw8ONOY9x8q0ESrCFhdVJy47agZnDnCb-BCAtngRGDt9yi0TvleSS_w0aPj8Vsk0atVkVhNYdZADN0kv0BzNau";<br /><br />echo fopen_url($url);<br />function fopen_url($url) <br />{ <br />    if (function_exists('curl_init'))<br />	{ <br />        $curl_handle = curl_init(); <br />        curl_setopt($curl_handle, CURLOPT_URL, $url); <br />        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2); <br />        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1); <br />        curl_setopt($curl_handle, CURLOPT_FAILONERROR,1); <br />		curl_setopt($curl_handle, CURLOPT_TIMEOUT,2);<br />        $file_content = curl_exec($curl_handle);<br />		$encode = mb_detect_encoding($file_content, array("ASCII","UTF-8","GB2312","GBK","BIG5"));		<br />		if($encode != "UTF-8")<br />		{<br />		   $file_content = mb_convert_encoding($file_content, "UTF-8", $encode);<br />		   //$file_content = iconv($encode,'utf-8//IGNORE',$file_content);<br />		}<br />        curl_close($curl_handle); <br />    }<br />	else<br />	{ <br />        $file_content = ''; <br />    } <br />    return $file_content; <br />}<br />?><br /><br />
ログイン後にコピー


一部文字化けしています。不思議ですね、写真をご覧ください



これはなぜでしょうか?

上記のコードは間違っているようです。元のページは明らかに GB2312 ですが、それがないことは、それが CP936 であることを示しています。

上記のコードが必要かどうかを確認してください。改善してください

本当にありがとうございます!
------ソリューションのアイデア----------------------
返されるデータには次のものが含まれます:

それに基づいてページのエンコーディングを知ることができます

判断するにはプログラミングだけが必要です利用できない場合
mb_detect_encodingは判断ミスが多いのでmb_check_encoding関数を追加

データ断片

不正な文字が存在する理由はありません

CP936 は GBK の国際名です
-----ソリューションアイデア----------------------
最初の問題はコードの文字化けではありません。画像の場合、curl は Baidu ページをクロールし、クロールを防ぐために特定のテキストを意図的に画像に変換します。 Web ページの要素を見てみると、これらの文字化けは、実は Baidu の画像アドレスであることがわかります。

2 番目の質問は、タイムアウトを大きく設定すれば、ネットワークの問題である可能性があります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート