php json_encode函数不支持BIGINT的问题
前几天看到新浪微博的微博平台微博id升级公告,也没怎么注意.感觉就是存储上要用string代替int,浪费点空间.对php应用应该没什么影响. 倒是新浪微博的32位id这么快就不够用了,让人感叹微博发展的神速. 今天搜索一些关键字,打开微博页面时,老是报告页面找不到.才发现,这玩意还真有影响. 那些打不开的页面的URL是这样的"http://api.t.sina.com.cn/1941569665/statuses/3.3430536723516E+15". Google上查了一下,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致. 在新的php(5.4?) json_decode里倒是有一个开关"JSON_BIGINT_AS_STRING"开关,可以使json_decode默认把BITINT当成string处理. 但是相信大家和我一样,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本. 一个折中的办法是把微博API返回的json字符串预处理一下,然后再调用json_decode. 也就是把 "id":12345678901234567890 换成 "id":"12345678901234567890" 代码片段如下,希望对和我类似情况的人有用. [source lang="php"] if (define('JSON_BIGINT_AS_STRING')) { $json = json_decode($data, false, 512, JSON_BIGINT_AS_STRING); }else{ //convert bigint to…