Блог. Скрипты

Простая функция транслитерации

Как перевести название страницы в транслит и сделать из него ЧПУ url ? И наоборот, как из адреса (алиаса) сделать название в кириллице?

Всё просто. Создаем функцию, принимающую два параметра. Последний из которых имеет значение по-умолчанию. В функции пишем две переменные и присваиваем им массивы, полодения значений которых совпадают друг с другом. Т.е. если в первом элементе с порядковым номером "0" в первом массиве стоит русская буква "А", то и в другом массиве в том же месте/элементе должна стоять аналогичная буква "А" только уже из английского алфавита.

Далее пишем функцию замены для слова с кириллицы на английские буквы. Затем пишем условие "если передан второй параметр со значением «1» то ..." и пишем функцию замены с транслита на русский.

Такой важный момент!- при составлений массивов для замены, сначала укажите составные буквы транслита. То есть те, что в русском варианте составляют одну букву, например "ya" -> "я", и только потом указывайте остальные буквы, например "r" -> "р", также не забудьте указать знаки препинания, дефисы, кавычки и их "аналоги", на которые они должны заменяться.

Также при переводе с русского на транслит для получения алиаса стоит перевести все буквы в нижний регистр.   

function translit($str, $bool=0) {
	$rus = array(' ', 'ж', 'й', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ь', 'ы', 'ъ');
	$angl = array('-', 'zh', 'ij', 'ts', 'ch', 'sh', 'shh', 'je', 'ju', 'ja', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'z', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', '~', 'y', '^');
	
	$str = trim($str);
	$str = mb_strtolower($str, mb_detect_encoding($str)); // перевод в нижний регистр для кириллицы
	
	if($bool==0) {
		$str = str_replace($rus, $angl, $str); // замена с русского на английский
	} else if($bool==1) {
		$str = str_replace($angl, $rus, $str); // наоборот, с транслита на кириллицу
	}
	return $str;	
}

echo translit("Привет мир"); // получим privet-mir

echo translit("privet-mir", "1"); // получим привет мир

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

if(!function_exists('mb_ucfirst'))
{
    function mb_ucfirst($str, $encoding = NULL)
    {
        if($encoding === NULL)
        {
            $encoding = mb_internal_encoding();
        }
        return mb_substr(mb_strtoupper($str, $encoding), 0, 1, $encoding) . mb_substr($str, 1, mb_strlen($str)-1, $encoding);
    }
}

$string = translit("privet-mir", "1"); // получим привет мир

echo mb_ucfirst($string, "UTF-8"); // получим Привет мир

Если не получается сделать первую букву заглавной, можно попробовать такой вариант

$string = translit("privet-mir", "1"); // получим привет мир

echo mb_ucfirst($string, mb_detect_encoding($string)); // получим Привет мир

Смотреть все статьи