做项目时碰到这么一个问题php后台返回的接口,前台无法识别,bejson也无法解析。
错误效果如下,解析时 json里面的字段前面有红点。
请求的json格式如下;
经过两天的挖坑发现是返回的内容里面,包含bom格式的编码。
解决方法去掉bom编码,(通过转化成utf8编码格式,从而达到去除utf-8-bom的作用)
实现思路是:(由于不知道data数组里面的哪一个标签前面出现了bom编码,因此递归data数组,去掉bom标签)
public function checkBom($arr){
foreach ($arr as $k => $v){
if(is_array($v)){
$arr[$k] = $this->checkBom($v);
}else{
$encode = mb_detect_encoding($v, array("ASCII","UTF-8","GB2312","GBK","BIG5")); //获取编码,编码格式
if($encode == 'UTF-8' ){
$arr[$k] = @iconv('UTF-8',"GBK",$arr[$k]); //转换编码,去掉bom编码。
$arr[$k] = @iconv('GBK',"UTF-8",$arr[$k]);
}
}
}
return $arr;
}