如何使用 Jquery 或 Javascript 将 UTF-8 字母替换为类似的拉丁字母

How to replace UTF-8 letters to similar latin letters using Jquery or Javascript

如何将 Ė È É Ê È Ą Ç 等所有 UTF-8 字母替换为类似的拉丁字母。例如,字符串 ĖÈÉÊËĄČ 的输出将是 EEEEEAC 使用 Javascript 或 Jquery?

这个问题中描述的技术 How do I convert special UTF-8 chars to their iso-8859-1 equivalent using javascript? returns 结果为 UTF-8 字节序列,因此 encodeURIComponent("å") 的结果将等于 %C3%A5,在我的例子中它应该是 a

这个问题可能与这个问题重复 Remove accents/diacritics in a string in JavaScript 但该问题中提供的所有解决方案都是通过硬编码所有可能的字符并将其映射到您想要替换的字符,这不是很好干净的解决方案。

如果你被允许使用函数String.normalize()(它是ES6标准的一部分,只适用于现代浏览器),那么你可以使用这个函数:

function removeDiacritics(input)
{
    var output = "";

    var normalized = input.normalize("NFD");
    var i=0;
    var j=0;

    while (i<input.length)
    {
        output += normalized[j];

        j += (input[i] == normalized[j]) ? 1 : 2;
        i++;
    }

    return output;    
}

这个函数有什么作用?首先,它将输入字符串规范化为 NFD:

Characters are decomposed by canonical equivalence, and multiple combining characters are arranged in a specific order.

这意味着复合字符(带有变音符号的字符)被分解为两个字符。例如字符é分解为e和组合字符´.

下一步是识别分解字符并跳过组合重音字符的循环。