Проблема кодирования города Maxmind Geoip

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

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

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

Спасибо!

3 ответа

Решение

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

http {
    geoip_city            GeoLiteCity.dat  utf8;
    ...

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

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

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

Несмотря на то, что MaxMind предоставляет API GeoIPCity, который использует 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');
Другие вопросы по тегам