Запрос китайских адресов в геокодировании Googlemap API

Я следую демонстрационному коду из статьи phpsqlgeocode.html.

В БД я вставил несколько китайских адресов в кодировке utf-8. Я нашел после urlencode китайский адрес, вывод адреса был бы неправильным. Как этот:

http://maps.google.com.tw/maps/geo?output=csv&key=ABQIAAAfG3KxFZXjEslq8VNxMBpKRR08snBovzCxLQZ9DWwpnzxH-ROPxSAS9Q36m-6OOy0qlwTL6Ht9qp87w&q=%3F%3F%1F%3F%3F%3F

Затем он выводит 200,5,59.3266963,18.2733433 (я не могу запросить это через PHP, но вместо этого через браузер).

Этот адрес на самом деле находится в Тайчжуне, Тайвань, но оказывается, что он находится в Швеции, Европе. Но когда я вставляю китайский адрес (например, 台中市西屯區智惠 街131巷56號58號60號) в URL, результат оказывается в порядке!

Как мне убедиться, что он отправляет исходный китайский адрес? Как избежать urlencode()? Я обнаружил, что удаление urlencode() ничего не меняет.

(Я изменил MAPS_HOST с maps.google.com на maps.google.com.tw.) (Я уверен, что мой ключ правильный, и геокодирование других английских адресов в порядке.)


person Robert    schedule 28.01.2010    source источник
comment
Должен иметь тег php. Кодировка URL явно не работает. %3F в URL-адресе — это '?', что является результатом неудачного кодирования или декодирования. Похоже, что urlencode не поддерживает UTF-8, согласно php.net/manual/ ru/function.urlencode.php   -  person Christoffer Hammarström    schedule 28.01.2010
comment
urlencode просто кодирует собственные байтовые строки PHP, в какой бы кодировке они ни находились; он ничего не знает о Unicode. Что-то исказило китайские иероглифы еще до того, как urlencode заглянул внутрь.   -  person bobince    schedule 28.01.2010


Ответы (1)


q=%3F%3F%3F%3F%3F%3F%3F%3F%3F132%3F

декодирует в:

?????????132?

так что что-то испортило строку еще до URL-кодирования. Это может произойти, если вы попытаетесь преобразовать китайские символы в кодировку, которая не поддерживает китайские символы, например Latin-1.

Вам необходимо убедиться, что вы последовательно используете UTF-8 в своем приложении. В частности, вам нужно убедиться, что таблицы в базе данных хранятся с использованием набора символов UTF-8; с точки зрения MySQL, сопоставление UTF-8. В противном случае сопоставление по умолчанию для MySQL — Latin-1. Вы также захотите убедиться, что ваше соединение с базой данных использует UTF-8, вызвав 1mysql_set_charset('utf-8')`.

(Из вашего вопроса я предполагаю, что вы используете PHP.)

person bobince    schedule 28.01.2010