$json_data=file_get_contents('http://www.btc38.com/trade/getTradeList.php?coinname=XRP');$data=json_decode($json_data,true);var_dump($data);//为什么仍然输出字符串????ps:在jslint.com测试$json_data为valid
2 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
BOM!我直接echo从网页获取到的内容,然后传递给json_pp:>>>phpa.php|json_ppmalformedJSONstring,neitherarray,object,number,stringoratom,atcharacteroffset0(before"\x{ef}\x{bb}\x{bf}{"...")at/usr/bin/core_perl/json_ppline44.
阿晨1998
TA贡献2037条经验 获得超6个赞
$header=array("User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/31.0.1650.63Safari/537.36");$curl=curl_init('http://www.btc38.com/trade/getTradeList.php?coinname=XRP');curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_HTTPHEADER,$header);$res=curl_exec($curl);curl_close($curl);$arr=json_decode($res);switch(json_last_error()){caseJSON_ERROR_NONE:echo'没有错误发生';break;caseJSON_ERROR_DEPTH:echo'到达了最大堆栈深度';break;caseJSON_ERROR_STATE_MISMATCH:echo'无效或异常的JSON';break;caseJSON_ERROR_CTRL_CHAR:echo'控制字符错误,可能是编码不对';break;caseJSON_ERROR_SYNTAX:echo'语法错误';break;caseJSON_ERROR_UTF8:echo'异常的UTF-8字符,也许是因为不正确的编码。';break;default:echo'未知错误';break;}?>确实挺奇怪的,运行如上代码,使用json_last_error()最终提示的是语法错误。根据错误关键词搜索到SO中的这个问题:json_decodereturnsJSON_ERROR_SYNTAXbutonlineformattersaystheJSONisOK情况比较类似。按照答案之一说的怀疑了一下编码问题,不过看了下是UTF-8,没有问题。单纯的复制页面中的字符串的话是没有问题的(复制到页面和PHP中都没有问题)。这个不算是答案,算是帮助题主补充说明吧,我也还在努力的寻找答案中。后记感谢@依云的答案,让我明白了原来是可恶的BOM的问题,关于BOM的问题@依云的维基百科链接已经很详细了,我就不多说了,这里就说一下怎么去除吧。其实BOM就是在字符串的最开头增加了三个字符,我们把它去除掉就好了。在json_decode之前用substr去除就好了,例如:$res=substr($res,3);$arr=json_decode($res,true);
添加回答
举报
0/150
提交
取消