У меня возникла проблема со специальными символами для адресов из моей базы данных для геокода 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. }
в$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 в моем коде не работает.
Я пытался 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... }
в$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... }
Попробуйте использовать urlencode
для вывода данных базы данных
подобно
$address = urlencode($row['address'])
Также удалите этот $address = str_replace(" ","+",$address);
из текущего кода.