【发布时间】:2014-04-21 20:56:32
【问题描述】:
我正在设置一个新的服务器,并且发现这个 sn-p 代码在每个设置中的行为都不同:
function isJson($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
echo isJson("2014-04-21") ? "is json" : "is not json";
旧服务器有:
- PHP 5.5.5
- json 支持启用
- json 版本 1.2.1
- 结果:“不是 json”
- var_dump(json_decode("2014-04-21")) 的结果:NULL
新服务器有:
- PHP 5.5.11
- json 支持启用
- json 版本 1.3.2
- JSON-C 版本(捆绑)0.11
- 结果:“是 json”
- var_dump(json_decode("2014-04-21")) 的结果:int(2014)
我会很感激任何关于为什么会发生这种差异或在哪里来找出为什么会发生这种差异的指针。
【问题讨论】:
-
json_decode()在 5.5.11 中返回什么? -
你能 print_r(json_decode($string)) 吗?这无济于事,但我很好奇这是什么结果:)
-
一个问题是 json_last_error() 返回 last 错误。所以如果你调用 json_decode("garbage") 然后 json_decode("[1,2]") 最后一个 json_decode 调用很好,因为 "[1,2]" 是正确的 JSON,但最后一个错误是 JSON_ERROR_SYNTAX,因为 "garbage " 不是正确的 JSON。
-
它看起来像一个错误。你在做什么取决于能够验证 JSON,也许有一些替代解决方案?
-
等一下我正在安装 php 5.6 :)
标签: php