Google Geocode: реализация PHP - проблемы с кодировкой символов - PullRequest
0 голосов
/ 01 декабря 2009

Я работаю с данными об адресах в Великобритании, а также с данными о международных адресах.

Мне нужно геокодировать адресные данные для использования на карте Google. Я делаю это с помощью службы HTTP. Т.е. / Построение строки запроса и передача ее в file_get_contents ($ THEURL).

Мне удалось точно геокодировать 80% адресных данных, однако те адреса в таких странах, как Норвегия и Швеция, содержащие специальные символы, не возвращают геокод. Код возвращается 602 (не удается найти адрес).

Просматривая документацию, я вижу, что строка, отправляемая в Google, должна быть в кодировке UTF8.

Я попробовал следующее, чтобы убедиться, что строка в кодировке UTF8 / удалить специальные символы.

1) Использование кодировки UTF8 в строке запроса - это часто приводит к отображению на экране некорректных символов.

2) mb_check_encoding сообщает, что строка правильно закодирована.

3) Использование функции для подстановки специальных символов в свои европейские эквиваленты (в надежде, что Google API это компенсирует.

Может кто-нибудь предложить причину, по которой мой метод не работает (с кодировкой или нет?).

1 Ответ

3 голосов
/ 01 декабря 2009

Вам необходимо систематически проходить через каждый аспект кодирования в вашей системе и определять, в какой именно кодировке он находится. Mb_detect_encoding и догадки не являются хорошим подходом.

Вам необходимо проверить кодировку:

  • входящие данные
    • страниц
    • GET параметры
    • подключение к базе данных
    • сопоставления таблиц базы данных
  • файлы сценариев, с которыми вы работаете

Если встречаются некорректные символы, скорее всего, вы используете где-нибудь кодировку ISO-8859-1 или другую кодировку, отличную от UTF-8. Когда все чисто UTF-8, запрос должен пройти.

Очень хорошая статья об основах: Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Unicode и наборах символов (без оправданий!)

...