2012-09-28 68 views
1

我想用file_get_contents解析http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/爲什麼file_get_contents返回奇怪的字符?

但它返回非常不尋常的字符和符號。

在哪裏好像我解析http://www.desi-tashan.com/它很好地工作。有人可以告訴爲什麼發生這種情況?

是否有涉及的任何編碼解碼?

的頁面似乎與WordPress上做出。

+0

我在谷歌找到了這個(http://www.oooff.com/php-scripts/basic-php-scraped-data-parsing/basic-php-data-parsing.php),它可能有幫助 –

+0

頁面不會告訴太多關於編碼或wordpress相關的解析... –

+0

符號可能是二進制圖像 –

回答

7

你看到的是gzipped

你可能有興趣看gzdecodezlib-decode(請注意,在PHP支持zlib沒有被啓用的內容默認情況下)

您的代碼可能是這樣的

$url = 'http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/'; 
$content = file_get_contents($url); 
$decoded_content = gzdecode($content); // or zlib_decode($content); 

stackoverflow上的另一個解決方案here,它在請求告知服務器不要gzip的請求中添加HTTP標頭Accept-Encoding

但是,它不www.desi-tashan.com,服務器忽略Accept-Encoding頭工作,並始終返回gzip壓縮的內容

+0

謝謝堆隊友..它的工作 –

+0

解決方案效果很好,謝謝! –

-1

您可以簡單地使用javascript charAt method在特定的位置,以獲得一個字符串的字符。 或 非常清楚,只需用該文件名提供該功能,它將返回所選文件的擴展名。

3

我已經看到這種情況發生在Web服務器配置錯誤的網站上,並且無論客戶端是否表明它可以應對,都會發回一個壓縮頁面。 (客戶端用Accept-Encoding頭文件指出,file_get_contents不會發送。)這通常在Web瀏覽器中起作用,因爲它們要麼默認壓縮頁面,要麼即使沒有要求,也能應對gzip壓縮的響應一。 (順便說一句,如果在unix衍生的系統上,你可以很容易地確認返回的內容是通過將其保存到文件然後運行file來確認的,或者只是查看結果的前幾個字節自己的gzip數據從1F 8B開始)

我不是手動解壓縮內容,而是親自使用PHP的curl庫。可以配置請求內容gzip壓縮的,如果你這樣做,它會透明地爲你解壓結果:

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, 'http://actualidad.rt.com/actualidad'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_ENCODING , 'gzip'); 
$content = curl_exec ($ch); 

這是更長遠的性能要優於手動解碼的結果,如果Web服務器得到的正常在將來配置爲將純文本發送給無法處理gzip的客戶端時,此代碼仍將請求並解碼壓縮版本。

+0

對於不支持'gzdecode'的主機,這是更好的解決方案 – SaidbakR

相關問題