我的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之后对地址进行url编码,但它仍然不起作用。
如何让它发挥作用?
答案 0 :(得分:1)
尝试urlencode
获取数据库输出数据
像
$address = urlencode($row['address'])
同时从当前代码中删除此$address = str_replace(" ","+",$address);
。
答案 1 :(得分:1)
如果您执行以下操作该怎么办:
$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...
}