Google Maps + Currency Converter特殊字符发行

时间:2018-08-02 00:12:07

标签: google-maps special-characters currency

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

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

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

那么,有谁知道我该如何解决?如果我需要澄清或添加更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

我解决了特殊字符问题。

如果还有其他需要此信息的人:我所做的就是将国家/地区名称保留在模块中,我没有使用特殊字符,只是将反向地理编码返回的名称中的特殊字符替换为其“正常”版本。然后它起作用了。

代码如下:

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;
    }
});