昨日、以前作った中国気象網の天気APIがローカルに保存されていたのですが、一部の都市が文字化けしていることが分かりました。
原因はまだ分かりません。ブラウザではまったく正常に見えるからです。 のように。その日の銀川市の天気を読む http://m.weather.com.cn/data/101170101.html
ブラウザで 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>));
しばらくオンラインで忙しかったのですが、その理由が分かりました。中国気象網が gzip 圧縮をオンにしていたからです。 http://www.php10086.com/2012/03/516.html から解決策を見つけました
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>
gzip エンコード形式を使用する
<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 チュートリアルに興味のある友人に役立つことを願っています。