Транслитерация URL
Еще одна небольшая "поделка" всего в 7 строк - на этот раз понадобилась транслитерация имени файла. Транслитерация URL является, с некоторых пор, весьма востребованной темой в среде специалистов по поисковой оптимизации.
Небольшое исследование, проведенное на тему правильной транслитерации url для сайта показало, что основные поисковые системы для российского сегмента Интернет - Яндекс и Google, несколько по-разному переводят русские буквы в английские аналоги.
Яндекс более вариативен, например всеми любимую букву "х" он сможет распознать, если она представлена любым из следующих английских вариантов "h,x,kh", Google предпочитает однозначное толкование - "h", однако вхождение поискового запроса в url типа "kharkov.ru" будет зачтено, при этом "k" просто отбросится. Таким образом для обоих поисковых систем транслитерация url домена, посвященного городу Харькову, с точки зрения SEO, будет идентичной. А вот для слова "сходка" подобный вариант с Google уже не пройдет.
Этот краткий экскурс в особенности транслитерации был затеян с одной целью - объяснить постановку решаемой задачи. Итак, имеем как минимум два варианта преобразования русских букв с возможным расширением количества толкований и толкователей, поэтому при реализации будет уместно использование массивов.
Далее, следует максимально синхронизировать оба набора символов, чтобы их воспринимали обе поисковые системы. После серии экспериментов по транслитерации, проведенных в Яндексе и Google, получим два набора, которые имеют всего два различия для букв "ж" и "щ".
Не знаю как вы, а я ёжиков уважаю, поэтому отдам должное ещё и русской букве "ё", а вот твердый и мягкий знаки, к сожалению, пришлось отбросить - при транслитерации url они бесполезны. В итоге получится следующее решение:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<script languaje="javascript">
function urlLit(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().replace(/ /g,'-');
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(/~/g,''));
}
document.write(urlLit('абвгдеё жзийклмно прстуфхцч шщъыьэюя',0));
</script>
</body>
</html>
Переменная tr, объявленная в выделеной строке примера, допускает eval-представление массива, в котором приведены варианты транслитерации конкретного символа. Таким образом можно представить любую букву алфавита в любом "начертании", а при необходимости добавить новую схему трансляции. Единственное, что следует отслеживать, - это размерность всех массивов - она должна быть одинаковой.
|
при транслитерации русская буква "А" не меняется на анг. букву "А".
вот пример, забил в скрипт слово "канцтовары"
скрипт выдал: "kаnctovаry",
отправил слово в яндекс
http://yandex.by/yandsearch?text=k%D0%B0nctov%D0%B0ry&clid=13999&tld=by&...
обратите внимание на урл "k%D0%B0nctov%D0%B0ry"
Спасибо, поправил. Действительно упустил "=" в условии (cc>=1072)
Отладчик в отношении "if(ch.length<3)" пишет "Не удалось получить значение свойства "length": значением объекта является NULL или он не определен"
Поправка - ошибка наблюдается только в IE all
Если нажать на кнопку "Проверить", все работает в IE, но если скопировать код, то не работает...
Если бы еще скрипт убирал все небуквенные символы, т.е. оставлял бы только [a-zA-Z0-9\-_] вообще цены бы не было
Проблема неоднозначности:
в здоровом теле здоровый дух -> хоть мясо протухо, но запах все еще свежий
пример: мать -> mat -> мат
как с этим бороться?
спасибо то что нужно
На основе этой функи накидал просто функу для транслитерации текста.
Немного допилил функцию, вдруг кому пригодится.
Транслитерирует кириллицу, заменяет все спецсимволы на дефисы, удаляет повторяющиеся дефисы, обрезает девисы по краям (в моем случае подчеркивание тоже не должно проходить, так что оно тоже заменяется на дефис)
Для украинского транслита переделал
Anonse erotyczne włocławek
Roksa praga
Anonse erotyczne toruń
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.