昨天發現以前做的調用 中國天氣網的天氣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編碼過的,回傳的字串就是編碼後的亂碼,如何解決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>
:
<span>file_get_contents</span>("compress.zlib://".<span>$url</span>);
無論頁面是否經過gzip壓縮,上述程式碼都可以正常運作!
<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>
以上就介紹了php file_get_contents讀取遠端檔案的亂碼問題gzip壓縮引起的,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。