我正在尝试从Instagram的热门帖子中获取信息,当我在api响应上使用var_dump()
时,它会填充一个字符串,其中包含我想要的信息,尽管当我尝试使用json_decode()
对其进行解码时,它会返回一个null,当我检查json_last_error()
时,我得到Malformed UTF-8 characters, possibly incorrectly encoded
。
这是我.php文件
<?php
function get_popular($user_id,$count){
$api = 'https://api.instagram.com/v1/media/popular?client_id='.$user_id.'&count='.$count;
$response = file_get_contents($api);
var_dump($response);
// Decode the response and build an array
error_reporting(E_ALL);
$deco = json_decode($response, 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;
}
var_dump($deco);
}
?>
我会试试这个:
$response = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($response));
$json = json_decode($response);
或不转换:
$json = json_decode(utf8_encode($response));
根据评论进行编辑:
我注意到 json 中有一些 html 实体(例如笑脸):
html_entity_decode($response);
我遇到了同样的问题,因为我在某处使用了默认的substr()
模块,然后将其替换为mb_substr()
并且现在工作正常