json_decode正在损坏字符串,而不是返回null


json_decode is mangling string instead of returning null

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

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

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

我认为这是一个错误,因为有这个问题的服务器运行的是旧的php。但后来我更新了它,使其与返回正确值(NULL)的服务器版本相同。它并没有解决问题。使用PHP 5.5.12版本的服务器可以工作。拥有php5.2,现在拥有5.5.17的服务器破坏了这些值。提供预期输出的服务器是windows,坏的是ubuntu。尽管我认为这不会有什么不同。

php.ini中是否有一个配置设置,或者我应该关闭它来改变这一点?类似于:fundamentally_break_json = 1

实际上,我相信UBUNTU的实现是正确的。jsondecode让您知道字符串中出现语法错误的位置。您应该检查的是json_last_error(),它将返回json_error_SYNTAX,让您知道字符串格式不正确。

如果json_last_error()==json_error_NONE,那么您应该可以自由设置$值。