应用程序信息:我有一个货币转换器应用程序,它的前端是一个谷歌地图,在用户所在的位置打开了一个信息窗口。信息窗口上有一个货币换算表,有两个下拉菜单,其中有我从API获得的货币列表。我使用反向地理编码从地理位置坐标或用户点击某个地方时获得国家或地区的名称。
我遇到的问题是国家或地区的名称中有特殊字符。我发现,当我点击这样一个国家或地区时,应用程序不知道在下拉列表中选择什么货币,这使得它只选择第一种货币(AED(。即使我使用HTML转义序列或复制粘贴国家名称(我正在将国家名称和相应的货币缩写打印到控制台上,所以我试着将打印的国家名称复制粘贴到控制台上。由于它来自谷歌地图,我需要使用它来避免差异问题;对于那些名称中有特殊字符的国家或地区,比如带有重音符号的字母或斜线,什么?(s印刷的货币缩写是单词undefined
(,我也有同样的问题发生。
我使用第三方CommonJS模块进行国家货币映射,该模块有一个getCountryAbbreviation
函数,我可以将国家的名称传递到该函数中,以获得该国家的货币缩写。我传递给前面提到的函数的名称必须与模块源代码中使用的名称匹配,否则它将无法工作。我使用的模块是https://github.com/payscale/country-currency-map.这是我自己的JavaScript代码:https://gist.github.com/DragonOsman/c6e8fb15343544e662f474c5a526d1c2.我正在使用Browserify让浏览器了解该模块。
有人知道我该怎么解决这个问题吗?如果我需要澄清或添加更多信息,请告诉我。
我修复了特殊字符问题。
如果还有其他人需要这些信息:我所做的是在我使用的模块中保留国家名称,不包含特殊字符,并将反向地理编码返回的名称中的特殊字符替换为"正常"版本。然后它起了作用。
这是代码:
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;
}
});