【问题标题】:Maxmind Geoip city encoding issueMaxmind Geoip 城市编码问题
【发布时间】:2015-11-28 04:01:12
【问题描述】:

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

我到处搜索,但找不到强制 utf-8 编码的 nginx 开关。我错过了什么?

我尝试在 ruby​​ 方面 city.force_encoding('iso-8859-1').encode('utf-8'),但没有骰子。

谢谢!

【问题讨论】:

    标签: ruby nginx geoip maxmind


    【解决方案1】:

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

    http {
        geoip_city            GeoLiteCity.dat  utf8;
        ...
    

    【讨论】:

    • 我很难理解的是,默认情况下,旧数据库返回 latin-1 编码的城市名称。在这个过程中,它在哪里被破坏了?是因为我的 html 页面是用元标记 utf-8 编码的 utf-8 吗?如果我的页面是 latin1 编码的,我会正确看到重音符号吗?感谢您提供的任何见解!
    【解决方案2】:

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

    例如(在php中):

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

    【讨论】:

      【解决方案3】:

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

      Fernando 解决方案有效,但如果新版本的 geoLiteCity.dat 使用非 ISO-8859-1 兼容字符集,您还可以确保最终字符串使用 mb_convert_encoding 进行 UTF-8 编码:

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

      【讨论】:

        猜你喜欢
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        相关资源
        最近更新 更多