php use function decode return null

今天在处理第三方接口的时候,返回的json数据怎样decode都是null,但是通过打印返回的json字符产,确实可以看出来是返回数据了.

通过json_last_error 返回4,即

JSON_ERROR_SYNTAX 语法错误

网上传言可能出现的问题:

1. json字符串必须以双引号包含

$output = str_replace(“‘”, ‘”‘, $output);

2. json字符串必须是utf8编码
$output = iconv(‘gbk’, ‘utf8′, $output);

3.不能有多余的逗号 如:[1,2,]
用正则替换掉,preg_replace(‘/,\s*([\]}])/m’, ‘$1′, $output)

 

然而并没有解决问题.

继续搜索发现说是有一些字符混在在json数据中,把这些字符替换掉,就可以了.

<?php
$checkLogin = file_get_contents("http://yourwebsite.com/JsonData");

// This will remove unwanted characters.
// Check http://www.php.net/chr for details
for ($i = 0; $i <= 31; ++$i) { 
    $checkLogin = str_replace(chr($i), "", $checkLogin); 
}
$checkLogin = str_replace(chr(127), "", $checkLogin);

// This is the most common part
// Some file begins with 'efbbbf' to mark the beginning of the file. (binary level)
// here we detect it and we remove it, basically it's the first 3 characters 
if (0 === strpos(bin2hex($checkLogin), 'efbbbf')) {
   $checkLogin = substr($checkLogin, 3);
}

$checkLogin = json_decode( $checkLogin );
print_r($checkLogin);
?>

origin:http://stackoverflow.com/questions/17219916/json-decode-returns-json-error-syntax-but-online-formatter-says-the-json-is-ok



五月 26th, 2015 by