2014-09-29 103 views
2

我的应用程序的一个组成部分看起来测试字符串可以被解码,如果是的话,它会以解码值的变量:json_decode是重整字符串,而不是返回null

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

+0

这听起来更像是你有[type juggling](http://php.net/manual/en/language.types.type-juggling.php)问题。 – 2014-09-29 16:41:22

+0

不能复制5.5.17:http://codepad.viper-7.com/YAMWMG – 2014-09-29 16:53:46

+0

@Jason McCreary我认为你是对的。 $ n =(int)“123-555-6789”返回$ n == 123。但问题依然存在。为什么这只发生在我的一台服务器上?我如何解决它? – Shane 2014-09-29 18:10:03

回答

0

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

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

+0

即使它不工作(打破电话号码)的json_last_error()== JSON_ERROR_NONE。它说没有错误,我会加上这个问题。 – Shane 2014-09-29 18:01:40

+0

这是肯定不正确。根据文档,它应该返回一个有效的对象或数组,或者为null。 – Shane 2014-09-29 18:05:59

相关问题