编码和JS - 如何从UTF-8文本中删除带有javascript的重音符号

时间:2015-06-12 08:43:09

标签: javascript encoding utf-8 character-encoding

我在网页上有这个选项,双击一个单词,它会打开一个新窗口并执行搜索。我使用了一个简短的javascript函数(如RemoveAccents()或accentsTidy())来删除单词中的重音,并将该单词作为字符串传递到新窗口的url中。现在我更改了网站的编码并在声明中使用UTF-8编码,并使用PHP函数iconv(“ISO-8859-1”,“UTF-”对UTF-8进行编码,因为它主要使用法语编写。 8“,$ string)(iconv(”Windows-1252“...)无法解决问题。)

但是使用UTF-8编码时,javascript函数不会删除重音符号,并且当url中包含重音时,新窗口为空。

当我切换回页面的ISO-8859-1编码时,它工作正常。

我使用alert(字符串)测试了这些函数,除了没有用等效字母替换的重音符号之外它们工作正常,新窗口的JS日志上唯一的错误消息是关于未声明的编码,很明显,当网址中有重音时页面为空白...

我还在其他页面上的url中测试了重音符号,如果不是因为后面所需的解码/编码,我也没有看到任何问题。

1 个答案:

答案 0 :(得分:0)

我在搜索Unicodes转义时找到了这个函数,在remove-accent函数执行操作之前应用它:

String.prototype.removeDiacritics = function() {
var diacritics = [
    [/[\300-\306]/g, 'A'],
    [/[\340-\346]/g, 'a'],
    [/[\310-\313]/g, 'E'],
    [/[\350-\353]/g, 'e'],
    [/[\314-\317]/g, 'I'],
    [/[\354-\357]/g, 'i'],
    [/[\322-\330]/g, 'O'],
    [/[\362-\370]/g, 'o'],
    [/[\331-\334]/g, 'U'],
    [/[\371-\374]/g, 'u'],
    [/[\321]/g, 'N'],
    [/[\361]/g, 'n'],
    [/[\307]/g, 'C'],
    [/[\347]/g, 'c'],
];
var s = this;
for (var i = 0; i < diacritics.length; i++) {
    s = s.replace(diacritics[i][0], diacritics[i][1]);
}
return s;

}