PHP: Функция транслита
Хочу поделиться кое какими своими наработками, в частности функцией траслита на 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, вашего сайта. Думая с установкой и подключением разберетесь самостоятельно. (Хотя блог в большинстве читают новички)

Автор:







Спасибо, а он будет слеши убирать? И есть ли какие-нибудь подводные камни? С кодировкой может проблемы или еще что? Я себе сделал, пока проблем нет.
Да слеши убирает, проблем с кодировкой быть не должно.
в converter’e большие буквы не сильно и помогут, всё равно всё в нижний регистр переводится.
а так реализация понравилась, у меня чуть по-другому было. этот вариант лучше, хоть и оставляет в результате возможность повторение — и _ много раз подряд
(если —— было в основной строке).
В конце ещё вот такой изврат может помочь.
while (strpos($str,’—‘)!==false)
$str = str_replace(‘—‘,’-‘, $str);