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

Encoding and JS - how to remove accents with javascript from a UTF-8 text

本文关键字:删除 javascript 文本 JS UTF-8 编码      更新时间:2023-09-26

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

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

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

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

我还在其他页面上的 url 中使用了重音进行测试,如果不是因为随后需要的解码/编码,我没有看到任何问题。

我在搜索 Unicodes 转义时发现了这个函数,在删除重音函数起作用之前应用它:

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;

}