【发布时间】:2012-02-15 02:19:37
【问题描述】:
我正在尝试根据用户的 IP 检索当地天气预报。
我正在使用 geoplugin.net 获取用户位置并将城市和国家/地区名称提供给 Google Weather API。
//Get user IP
$ip = $_SERVER['REMOTE_ADDR'];
$geolocation = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip));
$geo_city = $geolocation['geoplugin_city'];
$geo_country = $geolocation['geoplugin_countryName'];
$file = "http://www.google.com/ig/api?weather=".$geo_city.",".$geo_country;
$xml = simplexml_load_file($file);
//Echo content of retrieved XML for debugging purposes
echo "<pre>";
print_r($xml);
echo "</pre>";
它适用于大多数情况,但是当我在自己的 IP 上尝试它时,我得到了丹麦的 Søborg(它不是 100% 准确,但足够接近),这给了我来自天气 API 的几乎空洞的响应。
此案的主要嫌疑人是卑鄙的“ø”字。
我想要的 XML 可以在这里看到:http://www.google.com/ig/api?weather=S%C3%B8borg,Denmark
我得到的 XML 可以在这里看到:http://www.google.com/ig/api?weather=S
当我在浏览器中输入这个 URL 时,它可以正常工作:
http://www.google.com/ig/api?weather=Søborg,Denmark
当我使用这个版本时,它也能正常工作(在浏览器中):
http://www.google.com/ig/api?weather=S%C3%B8borg,Denmark
但此版本返回 Borg,Syddanmark 的预测:
http://www.google.com/ig/api?weather=S%26oslash%3Bborg,Denmark
当馈送到 simplexml_load_file() 时,以上都不会返回所需的结果。
如上所述,我怀疑这是字符集问题,但我不知道该怎么办。
正确的解决方法是什么?
我知道我可以使用纬度和经度作为 Google Weather API 的参数,但这只是规避问题,而不是解决问题。
【问题讨论】:
标签: php url character-encoding