Очень простое и лаконичное решение по транслитерации. Себе делал для формирования ссылки из названия (на русском). Старая функция отказывалась работать, после того как я перевел свой движок на UTF, так и не понял почему, если честно.
Работает просто: заменяет все символы в массиве $find на символы в массиве $replace, затем обрезает любые символы (знаки препинания, спец символы и пр.), оставляя только тире и нижнее подчеркивание. После всего заменяет пробелы на тире.
function translit($text) { $find=array('А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё',' Ж','ж','З','з','И','и','Й','й','К','к','Л','л','М','м',' Н','н','О','о','П','п','Р','р','С','с','Т','т','У','у',' Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш','Щ','щ','Ъ','ъ',' Ы','ы','Ь','ь','Э','э','Ю','ю','Я','я'); $replace=array('A','a','B','b','V','v','G','g','D','d','E','e','Yo','yo',' Zh','zh','Z','z','I','i','J','j','K','k','L','l','M','m',' N','n','O','o','P','p','R','r','S','s','T','t','U','u',' F','f','H','h','Ts','ts','Ch','ch','Sh','sh','Sch','sch','','','','','','','E','e','Yu','yu','Ya','ya'); $text = str_replace($find, $replace,$text); $text = preg_replace ("/[^\w\d\s_-]*/","",$text); $text=str_replace(" ","-",$text); return $text; }
пример: echo translit(‘слово’); // slovo