我为朋友的WordPress网站编写了一个API,该API依赖于JSON API插件来获取她最近文章的JSON源。它几个月来一直完美运行,但在几天前,当她共享主机切换到PHP 5.3时,它完全停止工作(当然,他们没有通知用户--为什么要通知呢?)。
我查找并在代码的某个部分中发现了一个奇怪的错误,该部分将JSON字符串返回给另一个函数的解码JSON对象。以前,这段代码(我发誓是这样的!)的工作方式如下:
这个函数开始返回NULL,而且json_last_error是4(语法错误)。我检查了utf8_encoding:正常。根据this post的建议,我检查了BOM-strangeness:正常。我在jsonlint.com和json.parser.online.fr中验证了JSON字符串,发现它完全有效。没有杂乱的html实体,也没有漫游的反斜杠。JSON字符串本身很好,应该已经验证过了。
然后,我将代码更改为以下内容:
我查找并在代码的某个部分中发现了一个奇怪的错误,该部分将JSON字符串返回给另一个函数的解码JSON对象。以前,这段代码(我发誓是这样的!)的工作方式如下:
$json_string = file_get_contents($url_to_json_string);
return json_decode($json_string);
这个函数开始返回NULL,而且json_last_error是4(语法错误)。我检查了utf8_encoding:正常。根据this post的建议,我检查了BOM-strangeness:正常。我在jsonlint.com和json.parser.online.fr中验证了JSON字符串,发现它完全有效。没有杂乱的html实体,也没有漫游的反斜杠。JSON字符串本身很好,应该已经验证过了。
然后,我将代码更改为以下内容:
$json_string = file_get_contents($url_to_json_string);
$json_object = json_decode($json_string);
return $json_object;
它起作用了。
有人知道为什么会发生这种情况吗?
json_decode
与json_last_error()
为4(很可能是JSON_ERROR_SYNTAX
)告诉您这不是有效的json。所以我认为这只是关于适当的错误处理。您是否熟悉防御性编程的概念? - hakre