cURL操作返回奇数格式,如何得到正常的结果


cURL operation returns with odd formatting, how to get normal results?

嗨,我试图写一个货币转换php脚本,利用谷歌计算器API通过cURL。(file_get_contents在我的主机服务器上不起作用).

我试图获取数据的URL是

http://www.google.com/ig/calculator?hl=en& q = 1美元= ? idr

从浏览器加载的结果:

{lhs: "1美元",rhs: "8 928.57143印尼盾",错误:",icc:真}

但是我的脚本返回:

{lhs: "1美元",rhs: "8Â 928.57143印尼盾",错误:",icc:真}

正如您在rhs部分看到的那样,有空格差异和一个有趣的a字符,妨碍了我的舍入操作。

我的脚本在爆炸&四舍五入etc: ($url已设置为上述值)

$ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $this->url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $rawresult = curl_exec($ch);
    curl_close($ch);

如何获得相同的格式?

您收到的是UTF-8编码的C2 A0。这就是不间断空间(NBSP)。您可以使用utf8_decode()来处理,也可以将页面设置为UTF-8字符集。

解码后,字符变成Latin-1中的chr(0xA0)。因此,您可能需要使用preg_split('/'s/u'而不是仅仅在空间上爆炸。

另一种选择是在通过cURL请求资源时添加Accept-Charset: ASCII标头。(然后谷歌在这里返回一个普通的空格。不过,这只是谷歌的一个解决方案,没有多少网站支持这样的HTTP功能。