JSON语法错误发生在jsone_在php中解码时,但JSON数据实际上不包含任何语法错误

JSON语法错误发生在jsone_在php中解码时,但JSON数据实际上不包含任何语法错误,php,json,wordpress,Php,Json,Wordpress,我正在尝试使用wordpress中的JSON获取帖子详细信息。在我的插件中,以下是json\u解码部分。但它返回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_

我正在尝试使用wordpress中的JSON获取帖子详细信息。在我的插件中,以下是
json\u解码
部分。但它返回
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\u ERROR\u语法
错误。但实际上,当我在上测试URL返回的JSON数据时。它表示“有效的JSON


为什么呢?这里有什么问题?

响应服务器在开始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 />";    
}
服务器不应打印前三个字符(239187和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));

问题是,您没有拿出数据包嗅探器来找出PHP请求的内容和响应的实际内容。使用jsonlint检查您的URL(不直接粘贴json)会得到json.parse:json数据的第1行第1列出现意外字符请告诉我如何解决此问题??嗨,steven。你是最好的。谢谢你的回答,它工作得非常好。我很难过,因为我没有足够的声誉而不能投票。非常感谢你,史蒂文。
$var = file_get_contents("http://athavaneng.com/?page_id=206861&posts_per_page=1", false, NULL, 3);
var_export(json_decode($var));