2016-02-12 65 views
0

當我嘗試使用php file_get_contents函數讀取kat.cr的rss訂閱源時,我收到了一些難以理解的文本,但是當我用瀏覽器打開它時,Feed很好。
我已經嘗試了很多其他主機,但沒有機會獲得正確的數據。
我甚至嘗試將用戶代理設置爲不同的瀏覽器,但仍然沒有改變。
這是我試過一個簡單的代碼:file_get_contents返回一個特定的url不可讀的文本

$options = array('http' => array('user_agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1')); 
$url = 'https://kat.cr/movies/?rss=1'; 
$data = file_get_contents($url, FILE_TEXT, stream_context_create($options)); 
echo $data; 

我很好奇他們是如何做它,我能做些什麼來解決這個問題。 ?

不可讀的文本的一部分:

<ي]يřم6-öپي©™ت,A7 {»AGW &يؤé;éN¹\ S'HK \S¤-¤l+ے÷ù我「(إژzA5ةض;غ%K4 {qtqy½ùو一個^»¬nھ|ûٹ發Eه¤Ĵřصڈ1個q ^}sü§7uس升دزؤý¾²ýف武•يغWGG·Iس& M>,「J〜$ےžؤ(ZIج'²جٹم÷|حغ「?!; گ'Ÿس¢ï³【Tر5ز³SGYٹ.ں@

其實每次我打開有一些不同的不可讀的文本鏈接。

+0

它是什麼樣的不可讀文本?你能粘貼前幾行嗎?這可能是一個編碼問題 – Mat

+0

@Mat在我的問題中添加它 – morTie

+0

您的目標網址是ssl - 可能在$上下文arg中提供ssl選項 – RamRaider

回答

2

正如我在評論中提到的 - 返回的內容是gzip編碼,因此您需要un-gzip數據。取決於你的php版本,你可能安裝了gzdecode,但我不這樣做,但是這裏的功能確實有效。

if(!function_exists('gzdecode')){ 
    function gzdecode($data){ 
     $g=tempnam('/tmp','ff'); 
     @file_put_contents($g, $data); 
     ob_start(); 
     readgzfile($g); 
     $d=ob_get_clean(); 
     unlink($g); 
     return $d; 
    } 
} 
$data=gzdecode(file_get_contents($url)); 
echo $data;  
+0

哇,這很好。所以......所有瀏覽器都會自動檢測並解碼gzip數據?是某種標準? – morTie