Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Транслит для загранпаспорта ГОСТ 7.79 ISO 9 Блог Вопросы и ответы Создать URL
Транслитерация

Laravel: Str::slug, русские заголовки и языковые таблицы

Хелпер Str::slug в Laravel умеет превращать кириллицу в латиницу, но таблица может отличаться от таблицы Яндекса. Разберём, как это проверить и что делать.

Как работает Str::slug

По описаниям, Str::slug использует библиотеку portable-ascii, которая принимает параметр языка. Параметр влияет на таблицу замен: для некоторых языков включаются диапазоны символов, которые иначе игнорируются. Результат для русского языка в официальной документации подробно не расписан, поэтому его нужно проверить.

Str::transliterate

Отдельный метод Str::transliterate переводит специальные символы в ASCII-эквиваленты. Распространён шаблон Str::slug(Str::transliterate($title)), описанный в публикации Laravel News.

Как проверить таблицу

Чтобы узнать, как ваш проект на Laravel превращает заголовок в адрес, создайте тестовую страницу с названием «Щёлково цех юг» и сравните результат. Таблица Яндекса даёт shhelkovo-ceh-yug; привычный английский вариант — shchyolkovo-tsekh-yug. Как читать другие результаты — в статье «Транслит Яндекса против встроенного в CMS».

Если результат не совпадает с Яндексом

  • Принять результат Laravel, если важнее единообразие: все адреса проекта создаются одним способом.
  • Написать собственный хелпер с таблицей Яндекса. Готовый код функции на PHP — в статье «Функция транслита на PHP, JavaScript и Python».
  • Задавать slug вручную из генератора.

Уникальность и смена slug

При совпадении заголовков добавляйте суффикс: как это сделать. После смены slug опубликованной записи настройте редирект.

Связанные статьи

Именованные маршруты и слаги в Laravel — в статье «Маршрутизация в Laravel».

Источники

Использованы обсуждения: о Str::slug и portable-ascii и публикация Laravel News о Str::transliterate. Сверьтесь с официальной документацией вашей версии.

Типичные ошибки

  • Полагаться на Str::slug, не проверив таблицу.
  • Использовать разные хелперы для slug в разных частях проекта.
  • Не добавлять суффикс при совпадении.
  • Менять slug опубликованной записи без редиректа.

Пошагово: приводим адреса к единому виду

  1. Проверьте, как Str::slug обрабатывает контрольную фразу.
  2. Сравните результат с таблицей Яндекса.
  3. Если нужна схема Яндекса, подключите собственный хелпер.
  4. Для существующих записей пересчитайте slug скриптом.
  5. Для опубликованных записей настройте редиректы.

Разбор заголовка по шагам

Возьмём заголовок «Как выбрать беговые кроссовки» и пройдём путь до адреса. Str::slug создаёт slug из заголовка.

Заголовок:           Как выбрать беговые кроссовки
Без служебных слов:  Как выбрать беговые кроссовки
Адрес целиком:       kak-vybrat-begovye-krossovki
Адрес короче:        kak-vybrat-begovye-krossovki

Режим «Убрать служебные слова» в генераторе делает второй шаг сам. Короткий адрес читается легче и лучше помещается в строку браузера. Ограничения по длине и другие правила составления адреса собраны в статье «Как составить ЧПУ-адрес страницы».

Памятка для редактора

Если в проекте несколько редакторов, дайте им короткую памятку. Достаточно этих правил:

  • Проверяем Str::slug контрольной фразой.
  • Один хелпер на весь проект.
  • Меняем slug — с редиректом.

Чек-лист

  1. Проверить Str::slug контрольной фразой.
  2. Выбрать схему.
  3. Использовать один хелпер.
  4. При смене slug настраивать редирект.

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

Превращает ли Str::slug кириллицу в латиницу?

По описаниям — да, используется библиотека portable-ascii. Таблицу нужно проверить.

Зачем параметр языка?

Он влияет на таблицу замен. Подробности — в документации библиотеки.

Как получить таблицу Яндекса?

Написать свой хелпер или задавать slug вручную из генератора.

Что делать при совпадении slug?

Добавить суффикс и проверять уникальность перед сохранением.

Проверьте свои заголовки: вставьте их в генератор ЧПУ и посмотрите, как в адресе выглядят слова с этой буквой.

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