msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

02 Feb 10 注意PHP5.2.11之后的json_decode

在PHP5.2.6以前, json_decode一个字符串, 将会返回字符串本身.

php -r "var_dump(json_decode('laruence'));"
//输出
string(8)"laruence";

但是, 不知道是不是因为之前在php bug中, 有人提议对于这种情况, 因为字符串不是合法的json格式的串, 所以应该出错, 返回NULL(http://bugs.php.net/bug.php?id=45989). 所以在PHP5.2.11之后(具体是从哪个版本开始, 我回头再验证), 竟然返回NULL了.

php -r "var_dump(json_decode('laruence'));"
//输出
NULL

但值得注意的是, 对于numeric_string, 都是返回numeric_string的数值形式.

php -r "var_dump(json_decode('0x3f34'));"
//输出
int(16180)

另外, 在PHP5.3以后,可以通过json_last_error()来验证转换是否正确.


分享到:



Related Posts:

Tags: , , ,

12 Responses to “注意PHP5.2.11之后的json_decode”

  1. Mike |

    请问一下5.2.9可以装yaf吗?

  2. janyonlee |

    json_decode($ret);转换为空 $ret={“retnum”:400,”errmsg”:”ok”} 这里面的400必须加上”"号吗?不加引号 就解析为空了

  3. janyonlee |

    json_decode($ret);转换为空 $ret={“retnum”:400,”errmsg”:”ok”} 这里面的400必须加上”"号吗?不加引号 就解析为空了

  4. 注意PHP5.2.11之后的json_decode | 万维网黑客联盟 |

    [...] 本文地址: http://www.laruence.com/2010/02/02/1272.html [...]

  5. RainChen |

    一般都会把这些封装到一个类,用静态方法调用,如
    JSON::decode()
    这样一来可以方便管理(归类、增加相关的方法),
    二来可以避免PHP升级后的接口变异。
    缺点是比直接调用原生的函数慢一点,但对比带来的可维护性的好处,这点效率牺牲完全可以忽略

  6. darasion |

    json_encode 有没有类似这样的问题?

  7. 雪候鸟 |

    @anderson 不要”\”abc\”", 这里是指”abc”, ;)

  8. Anders |

    guoxiaod@guoxiaod>php -r ‘var_dump(json_decode(“\”abc\”"));’
    string(3) “abc”
    guoxiaod@guoxiaod>php -v
    PHP 5.2.10-2ubuntu6.4 with Suhosin-Patch 0.9.7 (cli) (built: Jan 6 2010 22:41:56)

  9. Deepseath |

    类似这样频繁改动的函数,我会重新写个函数。呵呵,虽然麻烦但兼容性相对好一些,而且一旦确定环境了,进行优化也相对容易一些^_^

  10. 雪候鸟 |

    @enjoy 我看到在5.2.9的release notes中有关于json_decode的, 但不是和这个相关的.

  11. enjoy |

    我在5.2.8下试了下。
    php -r “var_dump(json_decode(‘laruence’));”
    //输出
    string(8) “laruence”

  12. 雪候鸟 |

    因为之前把几个PHP版本的安装路径搞混了, 看错了5.3的实现, 误以为5.3中和5.2.6一致, 抱歉给大家造成误解.

Leave a Reply

*