ホームページ > バックエンド開発 > PHPチュートリアル > php file_get_contents でリモート ファイルを読み取るときに文字化けする問題は、gzip 圧縮が原因で発生します。

php file_get_contents でリモート ファイルを読み取るときに文字化けする問題は、gzip 圧縮が原因で発生します。

WBOY
リリース: 2016-07-29 09:06:53
オリジナル
1172 人が閲覧しました

昨日、以前作った中国気象網の天気APIがローカルに保存されていたのですが、一部の都市が文字化けしていることが分かりました。

原因はまだ分かりません。ブラウザではまったく正常に見えるからです。 のように。その日の銀川市の天気を読む http://m.weather.com.cn/data/101170101.html

php file_get_contents读取远程文件的乱码问题gzip压缩引起的

ブラウザで JSON データを表示するのはまったく正常です。エンコードも正常です。ただし、file_get_contents を使用してブラウザで出力を読み取ると文字化けします。

<span>$url</span> = 'http://m.weather.com.cn/data/101170101.html'<span>;
</span><span>echo</span> '<pre class="brush:php;toolbar:false">'<span>;
</span><span>print_r</span>(<span>file_get_contents</span>(<span>$url</span>));
ログイン後にコピー

php file_get_contents读取远程文件的乱码问题gzip压缩引起的

しばらくオンラインで忙しかったのですが、その理由が分かりました。中国気象網が gzip 圧縮をオンにしていたからです。 http://www.php10086.com/2012/03/516.html から解決策を見つけました

PHP の file_get_contents がリモート ページのコンテンツを取得する場合、返される文字列はエンコードされて文字化けします。 gzip の問題を解決する方法:

curl ソリューション:

php file_get_contents读取远程文件的乱码问题gzip压缩引起的

<span>function</span> curl_get(<span>$url</span>, <span>$gzip</span>=<span>false</span><span>){
        </span><span>$curl</span> = curl_init(<span>$url</span><span>);
        curl_setopt(</span><span>$curl</span>, CURLOPT_RETURNTRANSFER, 1<span>);
        curl_setopt(</span><span>$curl</span>, CURLOPT_CONNECTTIMEOUT, 10<span>);
        </span><span>if</span>(<span>$gzip</span>) curl_setopt(<span>$curl</span>, CURLOPT_ENCODING, "gzip"); <span>//</span><span> 关键在这里</span><span>$content</span> = curl_exec(<span>$curl</span><span>);
        curl_close(</span><span>$curl</span><span>);
        </span><span>return</span><span>$content</span><span>;
}</span>
ログイン後にコピー

php file_get_contents读取远程文件的乱码问题gzip压缩引起的

gzip エンコード形式を使用する

file_get_contents ソリューション:

<span>file_get_contents</span>("compress.zlib://".<span>$url</span>);
ログイン後にコピー

ページ 上記のコードは、gzip 圧縮の有無にかかわらず正常に動作します。

PHP 4.3.0以降でサポートされており、fopen~などの関数にも使用できます!

解決策:

<span>$url</span> = 'http://m.weather.com.cn/data/101170101.html'<span>;

</span><span>echo</span> '<pre class="brush:php;toolbar:false">'<span>; 

</span><span>print_r</span>(<span>file_get_contents</span>("compress.zlib://".<span>$url</span>));<span>//</span><span>打开gzip压缩过的页面。 路径前不加compress.zlib:// 打开会有乱码。  </span>
ログイン後にコピー

上記は、gzip 圧縮によって引き起こされる php file_get_contents のリモート ファイルの文字化けの問題を紹介しています。これが、PHP チュートリアルに興味のある友人に役立つことを願っています。

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