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

时间:2015-10-10 16:37:18

标签: javascript jquery utf-8 iconv

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

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

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

1 个答案:

答案 0 :(得分:5)

如果您被允许使用函数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

  

字符按规范等价分解,多个组合字符按特定顺序排列。

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

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