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, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

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