Транслитерация URL

Транслитерация URL

Поисковые системы, в том числе Yandex и Google, отмечают нахождение ключевых слов в интернет адресе страницы. Использование кириллицы в адресах, пока еще встречается редко, обычно для передачи русских слов используют транслитерацию. На сегодняшний день существует несколько методов транслитерации, из которых метод с использованием буквосочетаний наиболее близок к реальности.
Приведу несколько функций на Javascript для транслитерации слов.

Функция 1

[php]

function cyr2lat(str)
{
    var cyr2latChars = new Array([‘а’, ‘a’], [‘б’, ‘b’], [‘в’, ‘v’], [‘г’, ‘g’],
                                 [‘д’, ‘d’],  [‘е’, ‘e’], [‘ё’, ‘yo’], [‘ж’, ‘zh’], [‘з’, ‘z’],
                                 [‘и’, ‘i’], [‘й’, ‘y’], [‘к’, ‘k’], [‘л’, ‘l’],
                                 [‘м’, ‘m’],  [‘н’, ‘n’], [‘о’, ‘o’], [‘п’, ‘p’],  [‘р’, ‘r’],
                                 [‘с’, ‘s’], [‘т’, ‘t’], [‘у’, ‘u’], [‘ф’, ‘f’],
                                 [‘х’, ‘h’],  [‘ц’, ‘c’], [‘ч’, ‘ch’],[‘ш’, ‘sh’], [‘щ’, ‘shch’],
                                 [‘ъ’, »],  [‘ы’, ‘y’], [‘ь’, »],  [‘э’, ‘e’], [‘ю’, ‘yu’], [‘я’, ‘ya’],
                                                                
                                 [‘А’, ‘A’], [‘Б’, ‘B’],  [‘В’, ‘V’], [‘Г’, ‘G’],
                                 [‘Д’, ‘D’], [‘Е’, ‘E’], [‘Ё’, ‘YO’],  [‘Ж’, ‘ZH’], [‘З’, ‘Z’],
                                 [‘И’, ‘I’], [‘Й’, ‘Y’],  [‘К’, ‘K’], [‘Л’, ‘L’],
                                 [‘М’, ‘M’], [‘Н’, ‘N’], [‘О’, ‘O’],  [‘П’, ‘P’],  [‘Р’, ‘R’],
                                 [‘С’, ‘S’], [‘Т’, ‘T’],  [‘У’, ‘U’], [‘Ф’, ‘F’],
                                 [‘Х’, ‘H’], [‘Ц’, ‘C’], [‘Ч’, ‘CH’], [‘Ш’, ‘SH’], [‘Щ’, ‘SHCH’],
                                 [‘Ъ’, »],  [‘Ы’, ‘Y’],
                                 [‘Ь’, »],
                                 [‘Э’, ‘E’],
                                 [‘Ю’, ‘YU’],
                                 [‘Я’, ‘YA’],
                                                                
                                 [‘a’, ‘a’], [‘b’, ‘b’], [‘c’, ‘c’], [‘d’, ‘d’], [‘e’, ‘e’],
                                 [‘f’, ‘f’], [‘g’, ‘g’], [‘h’, ‘h’], [‘i’, ‘i’], [‘j’, ‘j’],
                                 [‘k’, ‘k’], [‘l’, ‘l’], [‘m’, ‘m’], [‘n’, ‘n’], [‘o’, ‘o’],
                                 [‘p’, ‘p’], [‘q’, ‘q’], [‘r’, ‘r’], [‘s’, ‘s’], [‘t’, ‘t’],
                                 [‘u’, ‘u’], [‘v’, ‘v’], [‘w’, ‘w’], [‘x’, ‘x’], [‘y’, ‘y’],
                                 [‘z’, ‘z’],
                                                                
                                 [‘A’, ‘A’], [‘B’, ‘B’], [‘C’, ‘C’], [‘D’, ‘D’],[‘E’, ‘E’],
                                 [‘F’, ‘F’],[‘G’, ‘G’],[‘H’, ‘H’],[‘I’, ‘I’],[‘J’, ‘J’],[‘K’, ‘K’],
                                 [‘L’, ‘L’], [‘M’, ‘M’], [‘N’, ‘N’], [‘O’, ‘O’],[‘P’, ‘P’],
                                 [‘Q’, ‘Q’],[‘R’, ‘R’],[‘S’, ‘S’],[‘T’, ‘T’],[‘U’, ‘U’],[‘V’, ‘V’],
                                 [‘W’, ‘W’], [‘X’, ‘X’], [‘Y’, ‘Y’], [‘Z’, ‘Z’],
                                                                
                                 [‘ ‘, ‘-‘],[‘0’, ‘0’],[‘1’, ‘1’],[‘2’, ‘2’],[‘3’, ‘3’],
                                 [‘4’, ‘4’],[‘5’, ‘5’],[‘6’, ‘6’],[‘7’, ‘7’],[‘8’, ‘8’],[‘9’, ‘9’],
                                 [‘-‘, ‘-‘]);
 
    var newStr = new String();
 
    for (var i = 0; i < str.length; i++) {
 
        ch = str.charAt(i);
        var newCh = »;
        for (var j = 0; j < cyr2latChars.length; j++) {
            if (ch == cyr2latChars[j][0]) {
                newCh = cyr2latChars[j][1];
            }
        }
        // Если найдено совпадение, то добавляется соответствие, если нет — пустая строка
        newStr += newCh;
 
    }
    // Удаляем повторяющие знаки — Именно на них заменяются пробелы.
    // Так же удаляем символы перевода строки.
    return newStr.replace(/[-]{2,}/gim, ‘-‘).replace(/\n/gim, »);
}

[/php]

Тут все просто — вызываем функцию, передавая в неё строку для транслитерации.

 

Функция 2

[php]
function cyr2lat2(w,v)
{
    var tr=’a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]’.split(‘ ‘);
   var ww=»; w=w.toLowerCase();
   for(i=0; i<w.length; ++i) {
     cc=w.charCodeAt(i); ch=(cc>=1072?tr[cc-1072]:w[i]);
     if(ch.length<3) ww+=ch; else ww+=eval(ch)[v];
   }
   return(ww.replace(/[^a-zA-Z0-9\-]/g,’-‘).replace(/[-]{2,}/gim, ‘-‘).replace( /^\-+/g, »).replace( /\-+$/g, »));
}
[/php]

Функция отличается от первой. Передаем в неё два параметра: w — строка, v — 0 или 1 вариант перевода букв «ж» и «щ». 0-ой вариант больше «любит» Яндекс, 1-ый — Гугл.

Проверить результат работы этих функций на правильность можно, например, вот тут: http://translit-online.ru/yandex.html

4 комментария

  1. Здравствуйте, подскажите пожалуйста, как правильно заменить url на транслитерированный?

        1. Если честно, это очень емкий вопрос. В cms-ах в основном все делается с помощью плагинов, устанавливаешь, а дальше «забываешь» о этой проблеме. В самописном сложнее — в файле .htaccess создаются правила, причем на каждый раздел сайта, будь то каталог или контент оно будет свое. В принципе в интернете статей о том как это сделать хватает, например ЧПУ для самописного сайта — http://denweb.org/seo/chpu-delaem-krasivye-url-na-sajte/ или реализация для Drupal 7 — http://sirega.ru/nastroyka-chpu-na-drupal-7.html

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *