谷歌地图API在有效请求中返回“无效请求”

3
我正在尝试对我的数据库中的一堆地址进行反地理编码。我有大约200个地址,其中一半很顺利地工作了...我将Google地图请求放在了一个循环中,它也能正常工作。大约有100个地址返回了“INVALID REQUEST”消息。我回显了请求URL并将其放到了我的浏览器中,它返回了“状态:OK”和所有数据。为什么我的脚本会返回无效的请求而另一个浏览器标签返回OK呢?
这是我使用的函数:
function getLatLon($strasse, $plz) {
    $inhalt = simplexml_load_file('http://maps.googleapis.com/maps/api/geocode/xml?address='.$strasse.',+'.$plz.'&sensor=true');

    $geo['lat'] = $inhalt->result->geometry->location->lat;
    $geo['lon'] = $inhalt->result->geometry->location->lng;

    return $geo;
}

这个请求的URL看起来应该是这样的: http://maps.googleapis.com/maps/api/geocode/xml?address=Dreik%C3%B6nigstra%C3%9Fe+12,+Erlangen&sensor=true

如果有人能帮我解决这个问题或者检测到错误,那就太棒了 :) 问候, Philipp


检查$strasse和$plz是否对于那些不起作用的输入是有效的(尝试将它们与能够正常工作的输入进行比较),如果有时候能正常工作,这很可能就是问题所在。 - OMGtechy
嗨,是的,我也这样想,但即使消除了所有空格和特殊字符,也没有任何变化 :( - Atmos.Grey
1个回答

3
我相信错误是由于您发送未编码的德语字符引起的。当您通过浏览器进行操作时,URL将自动编码,但是您的PHP脚本不会自动编码。
使用 rawurlencode 来解决这个问题:
$inhalt = simplexml_load_file('http://maps.googleapis.com/maps/api/geocode/xml?'.
                              'address='.rawurlencode($strasse).',+'.
                              rawurlencode($plz).'&sensor=true');

嗨,你写这个的时候我已经解决了,但你说得对。我之前发送的是未编码的字符串,因此 PHP 无法替换任何特殊字符。在将所有内容转换为 utf-8 后,它就起作用了。谢谢! - Atmos.Grey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接