http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/を file_get_contents で解析しようとしています。
しかし、非常に変わった文字や記号を返します。
http://www.desi-tashan.com/を解析したかのように、うまく機能します。誰かがなぜこれが起こっているのか教えてもらえますか?
エンコードのデコードは関係していますか?
このページはワードプレスで作っているようです。
http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/を file_get_contents で解析しようとしています。
しかし、非常に変わった文字や記号を返します。
http://www.desi-tashan.com/を解析したかのように、うまく機能します。誰かがなぜこれが起こっているのか教えてもらえますか?
エンコードのデコードは関係していますか?
このページはワードプレスで作っているようです。
表示されるコンテンツはgzipped
gzdecode
または(PHPでのZlibサポートはデフォルトで有効になっていないことに注意してください)zlib-decode
コードは次のようになります
$url = 'http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/';
$content = file_get_contents($url);
$decoded_content = gzdecode($content); // or zlib_decode($content);
ここでのstackoverflowの別の解決策Accept-Encoding
は、サーバーにgzipしないように指示するリクエストにHTTPヘッダーを追加します。
ただし、これは機能しませんwww.desi-tashan.com
。サーバーはヘッダーを無視しAccept-Encoding
、常にgzip圧縮されたコンテンツを返します。
Web サーバーの構成に誤りがあり、クライアントが圧縮されたページに対処できるかどうかに関係なく、圧縮されたページを送り返すサイトでこれが発生するのを見てきました。(クライアントはAccept-Encoding
、file_get_contents が送信しないヘッダーでこれを示します。)これは、デフォルトで圧縮されたページを要求するか、要求していなくても gzip された応答に対処するため、通常は Web ブラウザーで機能します。 .
(ちなみに、UNIX 派生システムの場合、返されたものが gzip されていることは、ファイルに保存してからファイルを実行することで簡単に確認できます。または、結果の最初の数バイト (gzip データ) を自分で見てください。 1F8Bから始まります。)
コンテンツを手動で解凍するのではなく、代わりに PHP の curl ライブラリを個人的に使用します。gzip されたコンテンツを要求するように構成できます。そうすると、透過的に結果が解凍されます。
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://actualidad.rt.com/actualidad');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_ENCODING , 'gzip');
$content = curl_exec ($ch);
これは、結果を手動でデコードするよりも将来性があります。gzip を処理できないクライアントにプレーン テキストを返すように Web サーバーが将来的に適切に構成された場合でも、このコードは圧縮されたバージョンを要求してデコードします。
JavaScript の charAt メソッドを使用するだけで、特定の位置にある文字列を取得できます。またはかなり明確です。関数にファイル名を入力するだけで、選択したファイルの拡張子が返されます。