我正在使用PHP/CURL实施Google地图服务,目前地图API存在问题。 我正在用英语和俄语地址向Google地图发送查询。 英文地址正常工作,而俄罗斯地址失败(未找到地址)602Google Maps API问题与非英文地址(PHP/CURL)
奇怪的是,如果我复制粘贴卷曲查询与俄罗斯地址,浏览器,它工作正常(返回200和coords)使用。
我的代码是
public static function google_geolocator($geoloc){
$geoloc = urlencode(implode(" ",$geoloc));
$query = "http://maps.google.com/maps/geo?q={$geoloc}&sensor=true&oe=utf8";
echo $query;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $query);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FAILONERROR, TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$json = curl_exec($curl);
curl_close($curl);
$data = json_decode($json, TRUE);
return $data;
}
我通过搜索互联网和想出在User-Agent和& OE = UTF8等一些黑客,但这些都不似乎工作。最让我困惑的是,这种方法与英文地址完全一致,但与俄文不一致。尽管在两种情况下将查询粘贴到浏览器中都是完美的。
预先感谢您!
小更新:查询像在Chrome
http://maps.google.com/maps/geo?q=%D0%A2%D0%B0%D0%B8%D0%BB%D0%B0%D0%BD%D0%B4+%D0%9A%D0%BE+%D0%9F%D1%85%D1%83%D0%BA%D0%B5%D1%82&sensor=true&oe=utf8
作品,但不会在Firefox(同602)工作,而
http://maps.google.com/maps/geo?q=Thailand+Koh+Phuket&sensor=true&oe=utf8
两个
工作正常upd2 var_dumping($ data)返回
{
"name": "Таиланд Ко Пхукет",
"Status": {
"code": 602,
"request": "geocode"
}
}
和名称字段与Chrome响应中的名称字段完全相同。
upd3好吧,事情是如果我改变位置名称在俄罗斯咯,铬和FF返回200和坐标。问题似乎是Chrome在与Google进行通信时更加“智能”。重构的方法,所以位置名称总是以英文提供,而不管当前的语言环境是什么。看起来最好不要混淆Google和与英语不同的字符集。
'$ geoloc'从哪里来,它的编码是什么? –