Все статьи

Slugify: как превратить произвольный текст в URL-адрес

Для транслитерации кириллицы в русскоязычном интернете реально существует не один, а несколько конкурирующих стандартов: официальный ГОСТ 7.79-2000 (используется, например, в загранпаспортах и МВД), международный ISO 9 (побуквенная схема, однозначно обратимая) и упрощённая «народная» транслитерация, которой фактически пользуется большинство CMS и генераторов слагов. Из-за этого одно и то же слово может дать разные слаги в зависимости от того, какой библиотекой воспользовался разработчик.

Что делает преобразование в slug

  • Приводит все буквы к нижнему регистру.
  • Заменяет пробелы и знаки препинания на дефисы.
  • Транслитерирует кириллицу побуквенно в упрощённом варианте, а не по ГОСТ, — так результат остаётся интуитивно понятным без знания официального стандарта.
  • Убирает повторяющиеся дефисы и дефисы в начале и конце строки.

Например, заголовок «Привет, Мир! Как дела?» превращается в нечто вроде privet-mir-kak-dela — с буквой «щ» как shch, если она встречается, поскольку у неё нет однобуквенного латинского эквивалента ни в одном из стандартов.

Почему просто URL-encode не подходит

Percent-encoding (например, %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82 для кириллицы) технически валиден в URL, но нечитаем для человека и выглядит ненадёжно в адресной строке или при копировании ссылки. Slug решает именно проблему читаемости, а не только технической валидности.

Зачем это нужно

  • Автоматически генерировать URL-адрес статьи блога из её заголовка на русском.
  • Создать читаемый идентификатор из названия товара для интернет-магазина.
  • Сформировать имя файла или CSS-класс из произвольного текста, избежав недопустимых символов.

Коллизии: когда разные заголовки дают одинаковый slug

Заголовки «Привет, мир!» и «привет мир» после нормализации (нижний регистр, удаление пунктуации) превратятся в один и тот же slug privet-mir, хотя исходные тексты разные. Если slug используется как уникальный идентификатор (например, в URL статьи), такую коллизию нужно решать дополнительно — обычно добавлением числового суффикса или ID к дубликату.

Попробовать инструмент