PHP: Функция транслита

Author Автор: Роман Чернышов    Опубликовано: 18 января 2011

Хочу поделиться кое какими своими наработками, в частности функцией траслита на PHP. На входе кириллица, а на выходе предложение на латинской раскладке. Собственно для чего она может пригодиться? Например для генерации ЧПУ на своем сайте, из заголовка новости. Особенно эта функция может пригодиться сторонникам самописных CMS.

Пример:
 
Привет мир => privet_mir

Впрочем одним ЧПУ можно не ограничиваться, а пойти гораздо дальше. И конвертировать например, все ники пользователей на сайте, написанные на русском. Да, вы не поверите, но именно с такими просьбами ко мне обращаются «админы» периодически.

Не буду утомлять своими рассуждениями. Представляю вам функцию generate_chpu;

	function generate_chpu ($str)
		{
		$converter = 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',
		);
		$str = strtr($str, $converter);
		$str = strtolower($str);
		$str = preg_replace('~[^-a-z0-9_]+~u', '-', $str);
		$str = trim($str, "-");
		return $str;
		}

Полезная и не заменимая фишка для поискового SEO, вашего сайта. Думая с установкой и подключением разберетесь самостоятельно. (Хотя блог в большинстве читают новички)

3 комментария to “PHP: Функция транслита”

  • Nikolay 28.03.2012 в 7:46 дп

    Спасибо, а он будет слеши убирать? И есть ли какие-нибудь подводные камни? С кодировкой может проблемы или еще что? Я себе сделал, пока проблем нет.

  • Роман Чернышов 28.03.2012 в 11:10 дп

    Да слеши убирает, проблем с кодировкой быть не должно.

  • alex 24.03.2013 в 3:19 дп

    в converter’e большие буквы не сильно и помогут, всё равно всё в нижний регистр переводится.

    а так реализация понравилась, у меня чуть по-другому было. этот вариант лучше, хоть и оставляет в результате возможность повторение — и _ много раз подряд
    (если —— было в основной строке).

    В конце ещё вот такой изврат может помочь.
    while (strpos($str,’—‘)!==false)
    $str = str_replace(‘—‘,’-‘, $str);

Оставить комментарий

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик, Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка