Maxmind Geoip 城市编码问题

Maxmind Geoip city encoding issue

在使用 Nginx 配置 Max Mind 时(使用 proxy_set_header GEOIP_CITY $geoip_city; 之类的东西),当城市名称中有重音符号时(例如蒙特利尔),我遇到了编码问题。

我找遍了都没有找到nginx的开关来强制utf-8编码。我错过了什么?

我试图 city.force_encoding('iso-8859-1').encode('utf-8') 站在 ruby 一边,但没有骰子。

谢谢!

虽然没有记录,it appears您可以强制 Nginx 模块使用 UTF-8。要使用它,我相信您可以按以下方式加载数据库:

http {
    geoip_city            GeoLiteCity.dat  utf8;
    ...

您可以使用 utf8_encode() 来获得您想要达到的结果。

例如(在php):

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

尽管 MaxMind 提供了一个使用 UTF-8 作为默认字符集的 GeoIPCity API,GeoListeCity.dat 似乎使用了 ANSI 编码。由于有些地方没有英文翻译,可能会造成编码混乱...

Fernando 解决方案有效,但以防万一 geoLiteCity.dat 的较新版本使用非 ISO-8859-1 兼容字符集,您还可以使用 [=11 确保最终字符串为 UTF-8 编码=]:

$location->city = mb_convert_encoding($location->city, 'UTF-8');