2015-10-10 2 views
3

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

метод, описанный в этом вопросе 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, но все решения, предоставленные в этом вопросе, - это жесткое кодирование всех возможных символов и сопоставление с тем, которое вы хотите заменить, и это не очень чистое решение.

+0

Ну, один способ сделать это - определить, какие символы вы хотите заменить и что с ними, а затем использовать 'replace' с этим ... – CBroe

+3

Я не думаю, что здесь есть другое решение: [Javascript: remove акценты/диакритики в строках] (http://stackoverflow.com/questions/990904/javascript-remove-accents-diacritics-in-strings) –

ответ

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 и символ объединения ´.

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

+0

Работает на большинстве диакритических знаков, но не на этом «z̧». Можно ли тоже избавиться от этого? благодаря – Kareem

Смежные вопросы