PHP CURL获取Web Service出现乱码问题

本文介绍了解决PHP从API接口获取数据时出现乱码的问题。通过分析发现乱码来源于返回数据中的BOM头,并提供了去除BOM头的代码示例。

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值