当用Nginx配置Max Mind时(使用类似proxy_set_header GEOIP_CITY $geoip_city;的东西),当城市名称中有重音符号时(如蒙特利尔),我会遇到编码问题。我到处都找遍了,我找不到一个nginx开关来强制utf-8编码。我错过了什么?我试着city.force_encoding('iso-8859-1').encode('utf-8')在Ruby的一边,但没有骰子。谢谢!
proxy_set_header GEOIP_CITY $geoip_city;
city.force_encoding('iso-8859-1').encode('utf-8')
gkl3eglg1#
虽然没有文档记录,但似乎可以强制Nginx模块使用UTF-8。要使用它,我相信您可以按以下方式加载数据库:
http { geoip_city GeoLiteCity.dat utf8; ...
a0zr77ik2#
您可以使用utf8_encode()来获得您想要实现的结果。例如(在php中):
utf8_encode()
// $city_name = $record->city; $city_name = utf8_encode($record->city);
6ioyuze23#
尽管MaxMind提供了使用UTF-8作为默认字符集的GeoIPCity API,但GeoListeCity.dat似乎使用了ANSI编码。由于有些地方没有英语翻译,可能会导致编码混乱...Fernando解决方案正在工作,但以防新版本的geoLiteCity.dat使用非ISO-8859-1兼容的字符集,您也可以确保最终字符串是UTF-8编码的。例如使用mb_convert_encoding()(仍在PHP中):
mb_convert_encoding()
$location->city = mb_convert_encoding($location->city, 'UTF-8');
3条答案
按热度按时间gkl3eglg1#
虽然没有文档记录,但似乎可以强制Nginx模块使用UTF-8。要使用它,我相信您可以按以下方式加载数据库:
a0zr77ik2#
您可以使用
utf8_encode()
来获得您想要实现的结果。例如(在php中):
6ioyuze23#
尽管MaxMind提供了使用UTF-8作为默认字符集的GeoIPCity API,但GeoListeCity.dat似乎使用了ANSI编码。由于有些地方没有英语翻译,可能会导致编码混乱...
Fernando解决方案正在工作,但以防新版本的geoLiteCity.dat使用非ISO-8859-1兼容的字符集,您也可以确保最终字符串是UTF-8编码的。例如使用
mb_convert_encoding()
(仍在PHP中):