Как сделать из строки адрес страницы (slug)
Короткий ответ
Переведите строку в нижний регистр, замените всё, кроме букв и цифр, на дефис и уберите дефисы по краям:
<?php
function slug(string $text): string
{
$text = strtolower($text);
$text = preg_replace('/[^a-z0-9]+/', '-', $text);
return trim($text, '-');
}
echo slug('Hello, World! PHP 8.4');Результат:
hello-world-php-8-4Кириллица
Русские буквы сначала заменяют латинскими. Это делает расширение intl; если его нет, составьте таблицу замен для strtr():
<?php
$map = ['п' => 'p', 'р' => 'r', 'и' => 'i', 'в' => 'v', 'е' => 'e', 'т' => 't'];
echo strtr('привет', $map);Результат:
privetФункции из этого ответа
- preg_replace — Заменяет всё, что подошло под регулярное выражение.
- strtolower — Переводит латинские буквы в нижний регистр.
- trim — Удаляет пробелы и другие символы с начала и конца строки.