Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Разработка

Транслитерация на стороне клиента: за и против

Завершая разговор о создании слагов, обсудим, где именно лучше выполнять транслитерацию: в браузере, на сервере или в обоих местах.

Что даёт транслитерация в браузере

Когда редактор набирает заголовок, соседнее поле адреса заполняется само. Он сразу видит результат, может поправить его и не ждёт сохранения формы. Это удобно и снижает число ошибок в адресах.

Почему на клиента нельзя полагаться

  • значение приходит из браузера, и его можно изменить вручную;
  • скрипт может не выполниться или работать в старом браузере;
  • правила клиента и сервера со временем расходятся.

Отсюда главный вывод: итоговое значение всегда проверяется и при необходимости перегенерируется на сервере.

Единый источник правил транслитерации

Опасно поддерживать две независимые реализации. Лучше вынести таблицу соответствия букв в общий файл, из которого её читают и браузерный скрипт, и серверный код, либо использовать серверную функцию через небольшой запрос из формы. Таблица должна соответствовать правилам Яндекса.

const map = { 'щ': 'shh', 'ы': 'y', 'ё': 'e', 'ъ': '' };
// эта же таблица используется и на сервере

Клиентское значение как подсказка

Разумная схема: браузер предлагает вариант слага, пользователь может его отредактировать, а сервер нормализует, проверяет уникальность и сохраняет окончательный вариант. Так удобство сочетается с надёжностью.

Итоговая рекомендация

Вывод: транслитерацию в браузере используйте как удобный предпросмотр, а решение о финальном адресе оставляйте серверу.

Особенности работы со строками в браузере

Скрипты в браузере работают со строками в кодировке Unicode, и одинаковые на вид буквы могут иметь разное внутреннее представление, например «й» как одна буква или как сочетание двух символов. Перед транслитерацией такие строки приводят к единому виду, что подробно объясняется в статье про нормализацию Unicode.

  • нормализуйте строку до замены букв;
  • обрабатывайте регистр отдельно;
  • предусмотрите поведение для незнакомых символов.

Удобство для редактора

Автоматически заполненное поле адреса не должно раздражать: если редактор уже вручную исправил значение, скрипт обязан перестать его перезаписывать. Иначе каждое изменение заголовка будет стирать правки. Заведите отметку «адрес изменён вручную» и прекращайте автоподстановку после первого редактирования.

Проверка клиентской реализации

Клиентский код транслитерации нужно тестировать так же, как серверный: на тех же контрольных заголовках, с теми же ожидаемыми значениями. Если результаты расходятся, значит, одна из реализаций отстала, и её нужно привести к общей таблице соответствия.

Частые вопросы

Можно ли выполнять транслитерацию только в браузере?

Нет, значение из браузера можно изменить или оно может прийти пустым, поэтому итоговый слаг проверяют и формируют на сервере.

Как избежать расхождений между клиентской и серверной транслитерацией?

Использовать общий источник таблицы соответствия букв либо получать вариант слага от серверной функции.

Зачем тогда нужна клиентская транслитерация?

Как удобный предпросмотр адреса в форме, который помогает редактору сразу увидеть и при необходимости поправить результат.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также