【问题标题】:Google Maps + Currency Converter Special Characters Issue谷歌地图+货币转换器特殊字符问题
【发布时间】:2018-08-02 00:12:06
【问题描述】:

关于应用程序的信息:我有一个货币转换器应用程序,其中前端是一个谷歌地图,在用户的位置打开了一个信息窗口。信息窗口上有一个货币转换表,其中包含两个下拉菜单,其中包含我从 API 获得的货币列表。我使用反向地理编码从地理位置坐标或用户单击某个地点时获取国家或地区的名称。

我遇到的问题是带有特殊字符的国家或地区的名称。我发现当我点击这样的国家或地区时,应用程序不知道在下拉列表中选择哪种货币,这使得它只选择第一种货币 (AED)。即使我使用 HTML 转义序列或复制粘贴国家名称(我正在将国家名称和相应的货币缩写打印到控制台,所以我尝试将打印的国家名称复制粘贴到控制台,因为它来自谷歌地图,所以我需要使用它来避免差异问题;对于名称中包含特殊字符的国家或地区,例如带有重音符号或斜线的字母,什么是代替货币缩写的是单词undefined),我也遇到了同样的问题。

我正在使用第三方 CommonJS 模块进行国家/地区货币映射,该模块有一个 getCountryAbbreviation 函数,我可以将一个国家/地区的名称传递给该函数以获得该国家/地区的货币缩写。我传递给上述函数的名称必须与模块源代码中使用的名称匹配,否则它将不起作用。我使用的模块是https://github.com/payscale/country-currency-map。这是我自己的 JavaScript 代码:https://gist.github.com/DragonOsman/c6e8fb15343544e662f474c5a526d1c2。我正在使用 Browserify 让浏览器了解该模块。

那么有人知道我该如何解决这个问题吗?如果我需要澄清某些事情或添加更多信息,请告诉我。

【问题讨论】:

    标签: google-maps special-characters currency


    【解决方案1】:

    我修复了特殊字符问题。

    如果还有其他人需要这些信息:我所做的是在我使用的模块中保留国家名称,而不使用特殊字符,并将反向地理编码返回的名称中的特殊字符替换为其“正常”版本。然后就成功了。

    代码如下:

    let geo_coder = new google.maps.Geocoder();
    geo_coder.geocode({ 'location': location }, function (geocode_results, status) {
        let currency_abbr;
        if (status === google.maps.GeocoderStatus.OK) {
            if (geocode_results[1]) {
                let country = null;
                for (let r = 0, rl = geocode_results.length; r < rl; r++) {
                    let result = geocode_results[r];
                    if (!country && result.types[0] === "country") {
                        country = result.address_components[0].long_name;
                        console.log(country);
                        const fixed = result.address_components[0].long_name.normalize("NFKD").replace(/[^\x00-\x7f]/g, "");
                        result.address_components[0].long_name = fixed;
                        country = fixed;
                        currency_abbr = country_currency_map.getCurrencyAbbreviation(country);
                        console.log(currency_abbr);
                    }
                }   
            }
        } else {
            form.innerHTML += "Geocoding not for the following reason: " + status;         
        }
    
        for (let i = 0; i < select2.options.length; i++) {
            select2.options[i].selected = select2.options[i].id === currency_abbr;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多