file_get_contents和无效字符

时间:2012-04-29 11:21:51

标签: php json

我正在尝试使用file_get_contents()从stackoverflow api获取json响应,但是回到我身边的奇怪的字符如I–%&/mÊ{JõJ×àt¡€ $Ø@ìÁÍæ'ìiG#)«*ÊeVe] f @ etc等。

好的,地址是 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,结果是“我 - %& /mÊ{JõJ×àt”$ ...“

感谢您的帮助

3 个答案:

答案 0 :(得分: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>';
}

答案 1 :(得分:2)

使用gzdecode解码压缩内容。如果您没有gzdecode函数,则应使用this page的实现。我已经检查过它适用于您要检索的页面。

答案 2 :(得分:0)

首先用gzinflate解压缩。