微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Google地理编码不适用于数据库中带有特殊字符的地址

我在使用Google地理编码的数据库地址中的特殊字符时遇到了问题,但是如果我对它们进行硬编码则没有问题.

简单的地理编码

$url = "http://maps.googleapis.com/maps/api/geocode/json?address=". $address . "&sensor=true";      
$jsonfile = file_get_contents($url);
$jsondata = json_decode($jsonfile);
$lat = $jsondata->results[0]->geometry->location->lat;
$lng = $jsondata->results[0]->geometry->location->lng;

代码适用于标准地址,但是如果该地址中包含特殊字符(如果它来自我的数据库)则不起作用.

如果我将地址硬编码为:

$address = "10 Montée de Clausen, 1343 Luxemburg City, Luxembourg";
$address = str_replace(" ","+",$address);

代码有效.
如果地址来自我的数据库

$query="SELECT * FROM mytable";
$result=MysqLi_query($GLOBALS["___MysqLi_ston"], $query);
while($row=MysqLi_fetch_assoc($result)){
    $address = $row['address'];
    $address = str_replace(" ","+",$address);
    // geocode code.
}

没用

数据库位于utf8_unicode_ci中.
如果我回显了包含该地址的$url(即使该地址来自我的数据库),然后将该URL放入浏览器,则该URL实际上会吐出正确的数据,但是在我的代码中使用该URL无效.

我尝试对str_replace之前和str_replace之后的地址进行网址编码,但仍然无法正常工作.

我如何使它工作?

解决方法:

如果执行以下操作,该怎么办:

$query="SELECT * FROM mytable";
$result=MysqLi_query($GLOBALS["___MysqLi_ston"], $query);
while($row=MysqLi_fetch_assoc($result)){
    $address = urlencode(mb_convert_encoding($row['address'], 'UTF-8'));
    // geocode code...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐