php file_get_contents讀取遠程文件的亂碼問題(gzip壓縮引起的)


    昨天發現以前做的調用 中國天氣網的天氣api,保存到本地發現有部分城市是亂碼。

一直找不到原因。因為在瀏覽器看 完全正常。 如。讀取 銀川市的當天天氣  http://m.weather.com.cn/data/101170101.html 

 

在瀏覽器上看它的json數據 完全正常。編碼也正常。但用file_get_contents 讀取在瀏覽器輸出就是亂碼。

 

$url = 'http://m.weather.com.cn/data/101170101.html';
echo '<pre>';
print_r(file_get_contents($url));

 

 

在網上忙活一陣才發現 原因 中國天氣網開啟了gzip壓縮 。找到了解決方法   來自 http://www.php10086.com/2012/03/516.html

PHP的file_get_contents獲取遠程頁面內容,如果是gzip編碼過的,返回的字符串就是編碼后的亂碼,如何解決gzip問題方法有兩種:

curl解決:

 

function curl_get($url, $gzip=false){
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 關鍵在這里
        $content = curl_exec($curl);
        curl_close($curl);
        return $content;
}

采用gzip編碼格式

file_get_contents解決:

 

file_get_contents("compress.zlib://".$url);

無論頁面是否經過gzip壓縮,上述代碼都可以正常工作!

PHP 4.3.0以后版本支持,還可以用於fopen之類的函數~!

 

解決方法:

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

echo '<pre>'; 

print_r(file_get_contents("compress.zlib://".$url));//打開gzip壓縮過的頁面。 路徑前不加compress.zlib:// 打開會有亂碼。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM