做項目時碰到這麼一個問題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;
}