2015-09-02 3 views
3

При настройке Max Mind с Nginx (используя что-то вроде proxy_set_header GEOIP_CITY $geoip_city;), я получаю проблемы с кодировкой с именем города, когда в нем есть акценты (например, Монреаль).Проблема с кодировкой города Maxmind Geoip

Я ищу везде, и я не могу найти nginx-переключатель для принудительной кодировки utf-8. Что мне не хватает?

Я пробовал city.force_encoding('iso-8859-1').encode('utf-8') на рубине, но не играл в кости.

Спасибо!

ответ

7

Хотя не задокументировано, it appears что вы можете заставить модуль Nginx использовать UTF-8. Чтобы использовать это, я полагаю, вы загрузить базу данных следующим образом:

http { 
    geoip_city   GeoLiteCity.dat utf8; 
    ... 
+0

Вы сегодня завоевываете Интернет, спасибо большое! – allaire

+0

Я стараюсь понять, что по умолчанию устаревшая база данных возвращает имя, закодированное в кодировке Latin-1. Где в процессе происходит нарушение? Это потому, что моя html-страница является utf-8, закодированной с помощью метатега utf-8? Смогу ли я увидеть акценты правильно, если бы моя страница была закодирована в латинском языке? Спасибо за любую информацию, которую вы можете предоставить! – allaire

1

Вы можете использовать utf8_encode(), чтобы получить результаты, которые вы пытаетесь достичь.

Например (в PHP):

// $city_name = $record->city; 
$city_name = utf8_encode($record->city); 
0

Несмотря на то, что MaxMind обеспечивает GeoIPCity API, который использует UTF-8, как значение по умолчанию набор символов, оказывается, что GeoListeCity.dat использует кодировку ANSI. Поскольку некоторые места не имеют перевода на английский язык, это может привести к кодированию путаницы ...

Решение Fernando работает, но на всякий случай новые версии geoLiteCity.dat используют совместимую с ISO-8859-1 кодировку, вы можете также убедитесь, что конечная строка кодируется UTF-8 с использованием mb_convert_encoding:

$location->city = mb_convert_encoding($location->city, 'UTF-8'); 
Смежные вопросы