首頁 > 後端開發 > php教程 > php file_get_contents讀取遠端檔案的亂碼問題gzip壓縮所引起的

php file_get_contents讀取遠端檔案的亂碼問題gzip壓縮所引起的

WBOY
發布: 2016-07-29 09:06:53
原創
1175 人瀏覽過

    昨天發現以前做的調用 中國天氣網的天氣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編碼過的,回傳的字串就是編碼後的亂碼,如何解決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压缩引起的

<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>
登入後複製

以上就介紹了php file_get_contents讀取遠端檔案的亂碼問題gzip壓縮引起的,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板