
Простая функция транслитерации
Как перевести название страницы в транслит и сделать из него ЧПУ 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)); // получим Привет мир