Функция транслит на php с демонстрацией


У Google есть такая рекомендация для тех, кто создает сайты или занимается их поддержкой или наполнением:

Структура URL сайта должна быть предельно простой. Попробуйте организовать контент так, чтобы URL имели логическую структуру и были понятны для человека (по возможности используйте слова, а не идентификаторы, состоящие из множества цифр).
Говоря проще, лучше не использовать урл типа «index.php?id=83&pid=345&vid=300074», преобразовать их в такие «/funkcia-translit-chpu». У большинства современных CMS есть или встроенная функция или плагины, которые дают возможность перевести название страницы (которое чаще всего и берется в качестве URL) в транслит. Однако, если кмс самописная, то приходится делать это самостоятельно.

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

<?php
	function trans($title)
	{
	$alf = array(
			'а' => 'a',   'б' => 'b',   'в' => 'v',
			'г' => 'g',   'д' => 'd',   'е' => 'e',
			'ё' => 'e',   'ж' => 'zh',  'з' => 'z',
			'и' => 'i',   'й' => 'y',   'к' => 'k',
			'л' => 'l',   'м' => 'm',   'н' => 'n',
			'о' => 'o',   'п' => 'p',   'р' => 'r',
			'с' => 's',   'т' => 't',   'у' => 'u',
			'ф' => 'f',   'х' => 'h',   'ц' => 'c',
			'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sch',
			'ь' => '',    'ы' => 'y',   'ъ' => '',
			'э' => 'e',   'ю' => 'yu',  'я' => 'ya',

			'А' => 'A',   'Б' => 'B',   'В' => 'V',
			'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
			'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',
			'И' => 'I',   'Й' => 'Y',   'К' => 'K',
			'Л' => 'L',   'М' => 'M',   'Н' => 'N',
			'О' => 'O',   'П' => 'P',   'Р' => 'R',
			'С' => 'S',   'Т' => 'T',   'У' => 'U',
			'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
			'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',
			'Ь' => '',    'Ы' => 'Y',   'Ъ' => '',
			'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
		);
		$title = strtr($title, $alf);
		$title = mb_strtolower($title);	
		$title = mb_ereg_replace('[^-0-9a-z]', '-', $title);
		$title = mb_ereg_replace('[-]+', '-', $title);
		$title = trim($title, '-');			
		return $title;
	}	
?>
В теле функции определяется ассоциативный массив; вы, кстати, можете его исправлять. Так, например, иногда букву «ё» в транслите преобразуют в «yo», а не в «e», как у меня тут. С помощью mb_strtolower мы приводим строку к нижнему регистру, а дальше убираем все ненужные символы (точнее, заменяем их на "-"), ну и в коце убираем крайние "-".

Проверить можно следующим образом:

echo trans("Макар, зачем топтать мою морковь?!");
На выходе получим

makar-zachem-toptat-moyu-morkov
Если вы не понимаете, как работает транслит, то можно увидеть прямо на моем сайте - просто введите фразу сюда:

Вот что получается:


Стоит отметить, что тут результат будет не такой, как от функции php выше, так как здесь я использую js с немного другим алгоритмом. Здесь просто все преобразуется в нижний регистр, заменяются русские буквы на латинские и пробелы с другими знаками препинания преобразуются в "-".

Если вам требуется написать какую-либо функцию на php или javascript, расширяющую функционал вашего сайта, то вы можете обратиться ко мне - я с удовольствием и за небольшую плату исправлю или дополню ваш веб сайт. Или недорого сделаю его с нуля.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, php, транслит, функции




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




Начало работы с PhantomJS
RssUp – быстрый rss клиент для фриланса и не только
Урок 2. Введение в роутинг Laravel