json_decode是修改字符串而不是返回null

时间:2014-09-29 16:34:07

标签: php json configuration

我的应用程序的一部分看起来测试是否可以解码字符串,如果是,它会用解码的值覆盖变量:

if (json_decode($value, true)) {
    $value = json_decode($value, true);
}

在我的一台服务器上,如果我传入字符串" 123-555-6789"它会将其解析为有效的json,但它只返回字符串" 123"。如果相反,电话号码用句点字符分隔:" 123.555.6789" json_decode将返回" 123.555"。即使它正在这样做,json_last_error告诉我没有错误。

我认为这是一个错误,因为有这个问题的服务器运行较旧的php。但后来我更新了它,因为它与返回正确值(NULL)的服务器版本相同。它没有解决问题。 PHP版本5.5.12的服务器工作。拥有php 5.2并且现在具有5.5.17的服务器破坏了这些值。给出预期输出的服务器是windows,破坏的是ubuntu。虽然我认为这不会有所作为。

php.ini中是否有配置设置或我应该关闭哪些会改变这个?类似于:fundamentally_break_json = 1

1 个答案:

答案 0 :(得分:0)

实际上,我认为UBUNTU的实现是正确的。 json_decode让你知道字符串中出现语法错误的位置。您应该检查的是json_last_error(),它将返回JSON_ERROR_SYNTAX以告知您字符串格式错误。

如果json_last_error()== JSON_ERROR_NONE,那么您可以自由设置$ value。