Facebook ID整数奇怪地返回

时间:2011-10-08 09:00:21

标签: facebook-fql json

我正在使用以下网址进行FQL调用,然后进行卷曲调用。

$ url ='https://api.facebook.com/method/fql.query?access_token='.$access_token.'&query='.rawurlencode($query).'&format=JSON' ;

然后我通过json_decode调用传递返回的数据

我有这个问题:

SELECT name,page_id,page_url FROM page WHERE page_id IN(SELECT page_id FROM page_admin WHERE uid = $ uid)

返回指定UID为管理员的名称和页面列表。

在某些PHP安装上(我无法缩小范围),page_id从长整数转换为科学记数法 - 因此174311849258492将返回1.7431184925849E 14当然会破坏事物。

由于我无法在我的服务器上重现这一点,因此我不确定转换发生的位置。四处寻找我发现了这样做的建议:

json_decode(preg_replace('/:(\ d +,)/',':“$ {1}”,',$ response));

会解决它

但为什么有些json_decodes没有明显的理由投入科学记数法呢?

2 个答案:

答案 0 :(得分:7)

如果您使用自己的卷曲调用,那么您只需将& format = JSON-STRINGS附加到url的末尾即可将所有项目作为字符串返回。

答案 1 :(得分:3)

Danny指出它的32/64位问题。 FB假设一切都是64位并传回一个整数来代替这个值。

所以你需要做的是获取整数并在将它们从JSON数组中拉出之前将它们转换为字符串。页面ID和组ID作为整数传递(Facebook用户ID作为字符串传递)

执行此操作的代码是:

    $response = curl_exec($ch);
    $err_no=curl_errno($ch);
    curl_close($ch);
    $response=preg_replace('/"gid":(\d+)/', '"gid":"$1"', $response );
    $response=json_decode( preg_replace('/"page_id":(\d+)/', '"page_id":"$1"', $response ) );
    if (isset($response->message)) { 
        throw new Exception ($response->message);
    }
    return( $response);