我在使用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...
}
标签:php,mysql,json,geocoding
来源: https://codeday.me/bug/20191012/1902227.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。