Сучасні пакети мають механізм транслітерації символьного коду з назви сторінки. Як правило, ця фішка використовується у формах додавання сторінок, записів і т. п. Для чого це потрібно? Головним чином згенерований код використовується для формування URL сторінки. Транслітерація потрібна для перетворення символів російського алфавіту в англійський. Спробуємо зробити подібне власноруч.
Насамперед нам потрібно html форма, з якою ми будемо працювати допомогою функції javascript.
Форма:
Назва:
Код для URL:
Форма досить проста, містить два поля, перше поле з ім’ям name, вихідне поле, туди пишеться назва сторінки. Друге поле з ім’ям code, сюди буде виводитися результат транслітерації символів з поля name.
У полі name прописаний обробник події onKeyUp, який буде викликати нашу функцію translit().
Код функції:
function translit() {
var str = document.getElementById(“name”).value;
var space = ‘-‘;
var link = “;
var transl = {
‘а’: ‘a’, ‘б’: ‘b’, ‘в’: ‘v’, ‘г’: ‘g’, ‘д’: ‘d’, ‘е’: ‘e’, ‘е’: ‘e’, ‘ж’: ‘zh’,
‘з’: ‘z’, ‘і’: ‘i’, ‘ї’: ‘j’, ‘до’: ‘k’, ‘л’: ‘l’, ‘м’: ‘m’, ‘н’: ‘n’,
‘про’: ‘o’, ‘п’: ‘p’, ‘р’: ‘r’,’с’: ‘s’, ‘т’: ‘t’, ‘у’: ‘u’, ‘ф’: ‘f’, ‘х’: ‘h’,
‘ц’: ‘c’, ‘ч’: ‘ch’, ‘ш’: ‘sh’, ‘щ’: ‘sh’,’ъ’: space,
‘s’: ‘y’, ‘ь’: space, ‘е’: ‘e’, ‘ю’: ‘yu’, ‘я’: ‘ya’
}
if (str != “)
str = str.toLowerCase();
for (var i = 0; i < str.length; i++){
if (/[а-яе]/.test(str.charAt(i))){ // замінюємо символи російською
link += transl[str.charAt(i)];
} else if (/[a-z0-9]/.test(str.charAt(i))){ // символи на анг. залишаємо як є
link += str.charAt(i);
} else {
if (link.slice(-1) !== space) link += space; // інші символи замінюємо на space
}
}
document.getElementById(“code”).value = link;
}
Робочий приклад можна подивитися тут.
UPD:
Як ви вже зрозуміли даний приклад реалізований на javascript, це означає, що він виконується на стороні клієнта (браузера). Виконати транслітерацію може знадобитися на стороні сервера, в нашому блозі з’явився пост, в якому є приклади реалізації транслітерації на PHP.
Додав: htmaker, 16.05.2014 р.
(Ще не оцінили)
Завантаження…
Діліться з друзями:
См. також:
Мета тег robots, приклади використання
Рубрика: Html, CSS, Javascript, SEO
Stimed – задаємо CSS-стилі по часу
Рубрика: Html, CSS, Javascript
Небезпека використання атрибуту target=”_blank”
Рубрика: Html, CSS, Javascript, Інф. безпека
Нескінченна анімація обертання на CSS
Рубрика: Html, CSS, Javascript
Анімація обертання при наведенні курсору
Рубрика: Html, CSS, Javascript
Стилізація виділення номера телефону до мобільних браузерах
Рубрика: Html, CSS, Javascript
Список вибору на JQuery
Рубрика: Html, CSS, Javascript
Фіксований заголовок таблиці HTML
Рубрика: Html, CSS, Javascript
Ефекти кнопок для сайту
Рубрика: Html, CSS, Javascript
Коментарі
10.11.2015 у 03:54
а як відобразити результат не инпуте, а в діві?
Відповісти
10.11.2015 в 09:23
document.getElementById(‘yourDivID’).innerHTML = ‘html текст’;
Відповісти
10.11.2015 в 13:52
Величезне спасибі! Процвітання!
Відповісти
12.11.2015 у 03:19
є змінна $text (з php) з текстом, як застосувати в вищеописаною транслітерації без введення в вікно input?
Відповісти
12.11.2015 у 19:06
Хотів уточнити момент — робив так: var text = document.getElementById(‘name’).innerHTML = (»); але мабуть не вірно, не розуміється. Потрібна допомога )))
Відповісти
12.11.2015 в 19:45
Даний приклад реалізований на javascript. Якщо я правильно зрозумів, то вам слід робити транслітерацію на стороні сервера, в PHP.
Відповісти
13.11.2015 у 16:46
я чомусь думав, що можна замість вхідного инпута «вигодувати» (транслітерацію з цього прикладу) , але як це реалізувати?
Відповісти
13.11.2015 в 16:48
щось типу такого (пхп) echo $text (пхп)
Відповісти
13.11.2015 у 16:57
Запис:
var str = document.getElementById(“name”).value;
Отримує значення з поля, замінивши на
var str =
Ви тим самим підставляєте потрібне вам значення.
Залишається вам тільки викликати функцію не за події onKeyUp=”translit()”, а самостійно translit().
Ось приклад функції на PHP:
function transliterate($st) {
$st = strtr($st,
“абвгдежзийклмнопрстуфыэАБВГДЕЖЗИйклмнопрстуфыэ”,
“abvgdegziyklmnoprstufieABVGDEGZIyklmnoprstufie”
);
$st = strtr($st, array(
‘е’=>”yo”, ‘х’=>”h”, ‘ц’=>”ts”, ‘ч’=>”ch”, ‘ш’=>”sh”,
‘щ’=>”shch”, ‘ъ’=>”, ‘ь’=>”, ‘ю’=>”yu”, ‘я’=>”ya”,
‘Е’=>”Yo”, ‘Х’=>”H”, ‘Ц’=>”Ts”, ‘Ч’=>”Ch”, ‘Ш’=>”Sh”,
‘Щ’=>”Shch”, ‘Ъ’=>”, ‘Ь’=>”, ‘Ю’=>”Yu”, ‘Я’=>”Ya”,
));
return $st;
}
Відповісти
14.11.2015 у 05:19
Дякую за допомогу, спробую реалізувати.
Відповісти
16.11.2015 в 17:20
Дуже понравилос! скажіть, а як використ списки на select-option для транслітерації? робив select так — onchange=»translit()» , але мені видало те що всередині value=»цей 12123 номер», а мені потрібен текст як між тегами потрібен цей текст. Як реализоват? Буду вдячний!
Відповісти
16.11.2015 в 23:15
Замість:
Спробуй спробуй поставити це:
Перший
Другий
Відповісти
16.11.2015 в 23:20
function getSelectedText(elementId) {
var elt = document.getElementById(elementId);
if (elt.selectedIndex == -1) return null;
return elt.options[elt.selectedIndex].text;
}
var str = getSelectedText(‘name’);
Відповісти
17.11.2015 у 02:51
з цього варіанту:
отримав те, що є всередині value = » 9152435 » > ці цифри 9152435 (у кожному рядку вони різний), вони мені потрібен, їх міняти не можна.
Ваш код транслітерація його добре бачить. А мені потрібен текст віддати в транслітерація як у вашого прикладу (частина код):
value = » цифри не чіпаю » > Перша текст рядок її передаю в транслітерація< / option
і Другий рядок, і так далі.
Як передати текст рядок?
Відповісти
17.11.2015 в 08:44
Можна спробувати в циклі перебрати кожен option елемента select, робити це зручніше за допомогою Jquery.
Відповісти
29.10.2017 в 00:59
Привіт, ось все відмінно, але не працює заголовні літери?
Відповісти
01.11.2017 в 19:14
Привіт, перевір наявність рядки:
str = str.toLowerCase();
— вона повинна переводити рядок у нижній регістр
Відповісти