cURL操作以奇数格式返回,如何获得正常结果?

时间:2011-11-13 19:03:18

标签: php curl calculator

您好我正试图通过cURL利用Google Calculator API编写转换PHP脚本的货币。 (file_get_contents在我的托管服务器中不起作用)。

尝试从中获取数据的网址是

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

从浏览器加载的结果:

  

{lhs:“1美元”,rhs:“8 928.57143印度尼西亚卢比”,错误:   “”,icc:true}

但是我的脚本返回:

  

{lhs:“1美元”,rhs:“8 928.57143印度尼西亚卢比”,错误:   “”,icc:true}

正如你在rhs部分看到的那样,存在白色空间差异,以及一个有趣的A字符,妨碍了我的舍入操作。

爆炸前我的剧本&舍入等:( $ 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);

我如何获得相同的格式?

1 个答案:

答案 0 :(得分:2)

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

解码后,该字符在Latin-1中变为chr(0xA0)。所以你可能想要使用preg_split('/\s/u'而不是仅仅在空间上爆炸。

另一种方法是在通过cURL请求资源时添加Accept-Charset: ASCII标头。 (然后谷歌在这里返回一个普通的空间。虽然只是谷歌的一个解决方案,但没有多少网站尊重这些HTTP功能。)