我想在wordpress中使用 JSON 来获取帖子详细信息。在我的插件中,以下是json_decode
部分。但它返回null
。
$post_count = intval($instance['post_count']);
$eng_posts= @json_decode(file_get_contents("http://athavaneng.com/?page_id=206861&posts_per_page=".$post_count), true);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
在上面的代码中,我收到JSON_ERROR_SYNTAX
错误。但实际上,当我在http://athavaneng.com/?page_id=206861上测试http://jsonlint.com网址的返回JSON数据时。它说“有效的JSON ”。
为什么?这有什么问题?
答案 0 :(得分:1)
响应服务器在启动json输出之前发送3个奇怪的字符。通过这样做:
$var = file_get_contents("http://athavaneng.com/?page_id=206861&posts_per_page=1");
for($i=0; $i<10; $i++) {
echo $var[$i] . " : " . ord($var[$i]) . "<br />";
}
你会得到这样的东西:
ï : 239
» : 187
¿ : 191
{ : 123
" : 34
1 : 49
" : 34
: : 58
{ : 123
" : 34
服务器不应打印前三个字符(239,187和191)。作为一种解决方法,您应该能够在剥离前三个字符后解析它。
我可以使用以下代码解析你的json,它开始在字符3处读取:
$var = file_get_contents("http://athavaneng.com/?page_id=206861&posts_per_page=1", false, NULL, 3);
var_export(json_decode($var));