当使用Nginx配置Max Mind时(使用诸如proxy_set_header GEOIP_CITY $geoip_city;
之类的东西),当城市名称中带有重音时(如蒙特利尔),我会得到城市名称的编码问题。Maxmind Geoip城市编码问题
我到处搜索,找不到一个强制utf-8编码的nginx开关。我错过了什么?
我试图在红宝石的一面city.force_encoding('iso-8859-1').encode('utf-8')
,但没有骰子。
谢谢!
当使用Nginx配置Max Mind时(使用诸如proxy_set_header GEOIP_CITY $geoip_city;
之类的东西),当城市名称中带有重音时(如蒙特利尔),我会得到城市名称的编码问题。Maxmind Geoip城市编码问题
我到处搜索,找不到一个强制utf-8编码的nginx开关。我错过了什么?
我试图在红宝石的一面city.force_encoding('iso-8859-1').encode('utf-8')
,但没有骰子。
谢谢!
虽然没有记录,但是您可以强制Nginx模块使用UTF-8的it appears。要利用这一点,我相信你以下面的方式加载数据库:
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编码。由于有些地方没有英文翻译,可能会导致编码混淆...
费尔南多解决方案正在工作,但为防止geoLiteCity.dat的新版本使用非ISO-8859-1兼容字符集,您可能会也请确保最终字符串是使用UTF-8编码的:mb_convert_encoding
:
$location->city = mb_convert_encoding($location->city, 'UTF-8');
您今天赢得互联网,非常感谢! – allaire
我很难理解的是,默认情况下,遗留数据库返回拉丁编码的城市名称。在这个过程中哪里会被破坏?是否因为我的html页面是用元标记utf-8编码的utf-8?如果我的页面是latin1编码,我会正确地看到重音符号吗?感谢您提供的任何见解! – allaire