【问题标题】:How to replace UTF-8 letters to similar latin letters using Jquery or Javascript [duplicate]如何使用 Jquery 或 Javascript 将 UTF-8 字母替换为类似的拉丁字母 [重复]
【发布时间】:2016-01-08 11:15:01
【问题描述】:

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

此问题中描述的技术 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 重复,但该问题中提供的所有解决方案都是通过硬编码所有可能的字符并将其映射到您要替换的那个,这不是很干净的解决方案。

【问题讨论】:

标签: javascript jquery utf-8 iconv


【解决方案1】:

如果你被允许使用函数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和组合字符´

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

【讨论】:

  • 它适用于大多数变音符号,但不适用于这个“z̧”。也有可能摆脱这个吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2017-06-19
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2018-05-24
  • 1970-01-01
相关资源
最近更新 更多