На сайте можно использовать яндекс транслит онлайн ↵, и там же транслитерацию по универсальным правилам.

Правила транскрибирования русских букв от Яндекса ↵, можно найти и изучить в Яндекс Справке. Так же стоит изучить "дополнение к «Правилам транслитерации русских букв» ↵" от Αλέξις ο Μέγας, которые были учтены при написании данной функции.

Функция транслитерации по правилам Яндекса

/*
	* @author Belorus 
	* @site https://belorus.tools/php-skripty/translit/
	* @version 1.0.0
*/

// ==================================================================
// Функция транслитерации по правилам Яндекса
// ==================================================================
	function translitRuleYandex($text)
		{
		// Заведем алфавит для транслитерации
			$arrayTranslitTable = array(
				'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo',
				'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm',
				'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u',
				'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '',
				'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
				'е' => 'e'
			);

		// Заведем массив гласных букв
			$vowelsLetters = array('а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я');

		// Заведем массив гласных букв без Ё Ю Я
			$vowelsLettersShort = array('а', 'е', 'и', 'о', 'у', 'ы', 'э');

		// Заведем массив гласных букв без Ы
			$vowelsLettersShortOne = array('а', 'е', 'ё', 'и', 'о', 'у', 'э', 'ю', 'я');

		// Заведем массив гласных букв + Ь, Ъ
			$vowelsLettersBig = array('а', 'е', 'ё', 'и', 'й', 'о', 'у', 'э', 'ю', 'я', 'ь', 'ъ');

		// Заведем массив букв для ъ
			$lettersAfterSolidSign = array('а', 'и', 'о', 'у', 'э');

		// Приведем текст к нижнему регистру
			$text = trim(mb_strtolower($text, 'UTF-8'));

		// Удалим все символы кроме пробела
			$text = preg_replace('/[^а-яёa-z0-9\s]+/u', '', $text);

		// Обнулим переменные
			$transliteratedText = '';
			$resultText = '';

		// Посчитаем сколько символов в строке
			$countCharactersInText = mb_strlen($text, 'UTF-8');
			
		// Начинаем транслитерировать
			for($i=0; $i<$countCharactersInText; $i++)
				{
				// Возьмем предыдущий
					if($i > 0)
						{
						// Берем предыдущий символ
							$prevSimbol = mb_substr($text, $i-1, 1, 'UTF-8');
						}
					else
						{
						// Это первый символ
							$prevSimbol = '';
						}

				// Возьмем следующий символ
					if($i < ($countCharactersInText-1))
						{
						// Берем следующий символ
							$nextSimbol = mb_substr($text, $i+1, 1, 'UTF-8');
						}
					else
						{
						// Это последний символ
							$nextSimbol = '';
						}

				// Возьмем текущий символ
					$currentSimbol = mb_substr($text, $i, 1, 'UTF-8');

				// Начинаем проверять как транслитерировать
					if($currentSimbol == 'ъ' && $nextSimbol == 'е')
						{
						// Пришло сочетание символов ъе
						// В таком случае транслитерируем как ye
							$resultText = $resultText.'ye';

						// Пропустим следующий символ, т.к. его уже не нужно транслитерировать
							$i=$i+1;
						}
					elseif($currentSimbol == 'ы' && $nextSimbol == 'й' && (mb_substr($text, $i+2, 1, 'UTF-8') == ' ' || ($i+2 >= $countCharactersInText)))
						{
						// Пришло сочетание символов ый в конце слова
						// В таком случае транслитерируем как iy
							$resultText = $resultText.'iy';

						// Пропустим следующий символ, т.к. его уже не нужно транслитерировать
							$i=$i+1;
						}
					elseif($currentSimbol == 'ь' && in_array($nextSimbol, $vowelsLettersShort))
						{
						// Пришло сочетание ь + гласная
						// В таком случае транслитерируем как y
							$resultText = $resultText.'y';
						}
					elseif($currentSimbol == 'е' && in_array($prevSimbol, $vowelsLettersShortOne))
						{
						// Пришло сочетание Е после гласных (Кроме Ы)
						// В таком случае транслитерируем как ye
							$resultText = $resultText.'ye';
						}
					elseif($currentSimbol == 'ы' && in_array($prevSimbol, $vowelsLettersBig))
						{
						// Пришло сочетание Ы после Ъ, Ь и гласных
						// В таком случае транслитерируем как i
							// Доуточним, вдруг до этого был ъ - тогда допишем yi
								if($prevSimbol == 'ъ')
									{
									$resultText = $resultText.'yi';
									}
								else
									{
									$resultText = $resultText.'i';	
									}
						}
					elseif($currentSimbol == 'ы' && ($nextSimbol == 'ё' || $nextSimbol == 'ю' || $nextSimbol == 'я'))
						{
						// Пришло сочетание Ы, а за ним йотированные гласные
						// В таком случае не транслитерируем ы
						}
					elseif($currentSimbol == 'й' && ($nextSimbol == 'ё' || $nextSimbol == 'ю' || $nextSimbol == 'я'))
						{
						// Пришло сочетание Ы, а за ним йотированные гласные
						// В таком случае не транслитерируем й
						}
					elseif($currentSimbol == 'ъ' && in_array($nextSimbol, $lettersAfterSolidSign))
						{
						// Пришло сочетание ъ, а за 'а', 'и', 'о', 'у', 'э'
						// В таком случае ъ транслитерируем как y
							$resultText = $resultText.'y';
						}
					else
						{
						// Транслитерируем по общим правилам	
							$resultText = $resultText.strtr($currentSimbol, $arrayTranslitTable);
						}
				}

		// Заменим все пробелы на -
			$resultText = str_replace(' ' , '-', $resultText);

		// Возвращаем результат
			return trim($resultText);
		}
// ==================================================================

Функция транслитерирует текст без учета переноса строк. При транслитерации текста:

Если ты решил купаться.
И с обрыва прыгнул вниз,
Но в полёте передумал.
В речку мокрую нырять,
Прекрати паденье в воду.
И лети обратно, вверх.
Изменить своё решенье -
Может каждый человек.

Функция вернет результат:

esli-ty-reshil-kupatsya-i-s-obryva-prygnul-vniz-no-v-polyote-peredumal-v-rechku-mokruyu-nyryat-prekrati-padenye-v-vodu-i-leti-obratno-vverkh-izmenit-svoyo-reshenye--mozhet-kazhdiy-chelovek

Функция транслитерации по универсальным правилам

/*
	* @author Belorus 
	* @site https://belorus.tools/php-skripty/translit/
	* @version 1.0.0
*/

// ==================================================================
// Функция транслитерации
// ==================================================================
	function translitRuleRu($text)
		{
		$text = strip_tags($text);

		$text = strtr ($text, array('A'=>'a', 'B'=>'b', 'C'=>'c', 'D'=>'d', 'E'=>'e', 'F'=>'f', 'G'=>'g', 'H'=>'h', 'I'=>'i', 'J'=>'j', 'K'=>'k', 'L'=>'l', 'M'=>'m', 'N'=>'n', 'O'=>'o', 'P'=>'p', 'Q'=>'q', 'R'=>'r', 'S'=>'s', 'T'=>'t', 'U'=>'u', 'V'=>'v', 'W'=>'w', 'X'=>'x', 'Y'=>'y', 'Z'=>'z', 'А'=>'а', 'Б'=>'б', 'В'=>'в', 'Г'=>'г', 'Д'=>'д', 'Е'=>'е', 'Ё'=>'ё', 'Ж'=>'ж', 'З'=>'з', 'И'=>'и', 'Й'=>'й', 'К'=>'к', 'Л'=>'л', 'М'=>'м', 'Н'=>'н', 'О'=>'о', 'П'=>'п', 'Р'=>'р', 'С'=>'с', 'Т'=>'т', 'У'=>'у', 'Ф'=>'ф', 'Х'=>'х', 'Ц'=>'ц', 'Ч'=>'ч', 'Ш'=>'ш', 'Щ'=>'щ', 'Ь'=>'ь', 'Ъ'=>'ъ', 'Ы'=>'ы', 'Э'=>'э', 'Ю'=>'ю', 'Я'=>'я', 'Ї'=>'ї', 'Є'=>'є', 'І'=>'і'));

		$text = strtr ($text, array('ье'=>'ye', 'ъе'=>'ye', 'ьи'=>'yi', 'ъи'=>'yi', 'ъо'=>'yo', 'ьо'=>'yo', 'ё'=>'yo', 'Ё'=>'Yo', 'ю'=>'yu', 'Ю'=>'Yu', 'я'=>'ya', 'Я'=>'Ya', 'ж'=>'zh', 'Ж'=>'Zh', 'х'=>'h', 'Х'=>'H', 'ц'=>'c', 'Ц'=>'C', 'ч'=>'ch', 'Ч'=>'Ch', 'ш'=>'sh', 'Ш'=>'Sh', 'щ'=>'shch', 'Щ'=>'Shch', 'ъ'=>'', 'ь'=>'', 'ї'=>'yi', 'є'=>'ye'));
		$text = strtr ($text, array('а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'з'=>'z', 'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p', 'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'і'=>'i'));
		$text = strtr ($text, array('А'=>'A', 'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'З'=>'Z', 'И'=>'I', 'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R', 'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'Y', 'Э'=>'E'));
		$text = preg_replace('/[^a-z0-9]+/', '-', $text);

		$out = trim($text, '-');
		return $out;
		}
// ==================================================================

Функция транслитерирует текст без учета переноса строк. При транслитерации текста:

Никогда вопросов глупых
Сам себе не задавай,
А не то еще глупее
Ты найдешь на них ответ.
Если глупые вопросы
Появились в голове,
Задавай их сразу взрослым.
Пусть у них трещат мозги.

Функция вернет результат:

nikogda-voprosov-glupih-sam-sebe-ne-zadavay-a-ne-to-eshche-glupee-ti-naydesh-na-nih-otvet-esli-glupie-voprosi-poyavilis-v-golove-zadavay-ih-srazu-vzroslim-pust-u-nih-treshchat-mozgi