json_decode一个json字符为什么还是字符

$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
拉丁的传说
浏览 323回答 2
2回答

子衿沉夜

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

确实挺奇怪的,运行如上代码,使用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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript