【问题标题】:PHP's json_decode behaves differently on different serversPHP json_decode 在不同的服务器上表现不同
【发布时间】: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


【解决方案1】:

这显然是 PHP 中的一个错误:-/

旧答案:

这更容易......

function isJson($string) {
    return json_decode($string) !== NULL;
}

【讨论】:

  • 尚不清楚这是否会解决它。如果它没有检测到错误,它可能会返回它认为 JSON 代表的内容。
  • 好吧,那么它是 PHP 中的一个错误
  • 看看他更新的问题,它在is json 的情况下返回2014
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多