Как заменить буквы UTF-8 на похожие латинские буквы, используя JQuery или Javascript

Как заменить все буквы UTF-8, такие как Ė È É Ê Ë Ą Č и т.д. на аналогичные латинские буквы. Например, вывод строки ĖÈÉÊËĄČ будет EEEEEAC с использованием Javascript или JQuery?

описанная в этом вопросе Как преобразовать специальные символы UTF-8 в их эквивалент iso-8859-1 с помощью javascript? возвращает результат как последовательность байтов UTF-8, поэтому результат encodeURIComponent("å") будет равным %C3%A5, и в моем случае это должно быть a

Вопрос может быть дубликат для этого Удалить акценты/диакритики в строке в JavaScript, но все решения, предоставленные в этом вопросе, - это жесткое кодирование всех возможных символов и сопоставить это с тем, который вы хотите заменить, и этим не очень чистым решением.

+3
источник поделиться
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 и объединяющий символ ´.

Следующий шаг - это цикл, который распознает разложенные символы и пропускает совпадающие символы акцента.

+5
источник

Посмотрите другие вопросы по меткам или Задайте вопрос