PHP获取API接口数据时,发现解析不了,echo出来发现有乱码。代码如下:
public function testPost()
{
$url = 'http://api.local/test';
$para->name ="edwin";
$para->sex ="male";
$sPara = json_encode($para);
$sPara = "r=" . urlencode($sPara);
$sReturn = $this->http_post_data($url, $sPara);
echo $sReturn;
}
function http_post_data($url, $data_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HEADER,'Content-Type: application/json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$return_content = curl_exec($ch);//运行curl
curl_close($ch);
return $return_content;
}刚开始怀疑是不是对方接口多给了字符,用.net 写测试没有出现任何问题。
然后把返回的数据写入txt,在UltraEdit中打开,用16进制查看,发现是有乱码出现,字符:EF BB BF
再查资料,发现这个叫BOM头:BOM头是隐藏字符,非编辑字符,就像普通空文件一样,当我们写<?php的时候其实之前已经加了BOM头
if (substr( $return_content, 0, 3 ) == "\xEF\xBB\xBF" ){
$return_content=substr_replace( $return_content, '', 0, 3 ) ;
}开发的时候要替换掉它。
参考资料:http://xdebug.blog.51cto.com/1135229/849879
本文介绍了解决PHP从API接口获取数据时出现乱码的问题。通过分析发现乱码来源于返回数据中的BOM头,并提供了去除BOM头的代码示例。
2225

被折叠的 条评论
为什么被折叠?



