2012-04-29 68 views
4

我試圖從file_get_contents(),從stackoverflow api json響應,但回來給我奇怪的字符,如I–%&/mÊ{JõJ×àt¡€ $Ø@ @ìÁÍæ'ìiG#)«*ÊeVe] f @ etc等等。 。file_get_contents和無效字符

好吧,地址爲 http://api.stackoverflow.com/1.1/users/779187/

我的代碼是

$json_res = json_decode(file_get_contents("http://api.stackoverflow.com/1.1/users/779187/")) 明顯json_dec的反應是NULL,因爲字符串不是JSON。 我也試過沒有直接傾倒json_decode值,結果爲 「I-%&/ME {JõJ×àt¡€`$ ...」

感謝您的幫助

回答

2

使用gzdecode來解碼壓縮的內容。如果您沒有gzdecode功能,您應該使用this page的實現。我已檢查它是否與要檢索的頁面一起工作。

2

API響應是gzip壓縮。請參閱此頁解碼響應:http://api.stackoverflow.com/1.1/usage/gzip

如果切換到cURL,則可以使用CURLOPT_ENCODING選項對其進行解碼。

$url = 'http://api.stackoverflow.com/1.1/users/779187/'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_ENCODING, 1); 
$output = curl_exec($ch); 
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
if($status=='200') { 
    $data = json_decode($output); 
    echo '<pre>' . print_r($data,true) . '</pre>'; 
} 
+0

感謝傑米,這是一個優雅的解決方案,但cURL不活動的hostig(是一個鑽孔),我想實現此功能。 當然,我會在cURL激活的地方使用它。 – Goonie 2012-04-29 11:45:19