Translit. Не подумайте что у меня украли аккаунт
4th Ноябрь 2009
| Метки:
Добрый день.
хотелось функцию для транслитерации русск текста … в общем все они на strtr … и соответственно отказываются работат ьс ютф 8 (блин
)
пришлось скомпилить эту функцию из «готовых»
function translit($text)
{
static $ru, $eng;
if(!$ru)
{
$ru=array('а','б','в','г','д','е','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ы','ш','ь','А','Б','В','Г','Д','Е','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ы','Ц','Ш','Ь','ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я');
$eng=array('a','b','v','g','d','e','z','i','k','l','m','n','o','p','r','s','t','u','f','h','c','y','w','q','A','B','V','G','D','E','Z','I','J','K','L','M','N','O','P','R','S','T','U','F','H','C','Y','W','Q', 'yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA');
}
$text = str_replace($ru, $eng, $text);
$text = preg_replace("#[^0-9".join("",$eng)."]#", " ", $text);
return preg_replace("#\s+#","-",$text);
}
на всякий случай я тут ее отпощу, может кому еще пригодится
зы: До кучи она чистит всякое гавно в отличие от своих аналогов. разбавляя полученный текст «-».
ну все, удачи
дуд.
Похожие темы:

нормчо!
По моему пропустил букву Й
никто не безупречен
но не велика потеря я думаю
Это точно, спасибо за пример, мне пригодился для создании ЧПУ в одном скриптике.
два вопроса
1 не дохуяли заменять сначала str_replace потом preg_replace, одного preg_replace не хватит?
2 накой хуй у тебя тут символ начала строки «#[^".join("",$eng)."]#»
2. это конечная зачистка говна, подумай что будет в этой регулярке
[^abcdef....Z0..9] — просто стираю гавно всякое, которое не удалось заменить.
ну и последней регуляркой привожу к красивому виду.
я имел ввиду preg_replace_callback
я предполагаю, что str_replace в данной ситуации будет в десятки раз быстрее калбачной функции на каждый совпавший элемент
на самом деле даже каллбак не надо, достаточно одного for($i = 0; $i<strlen($i)
но str_replace както нагляднее.
[php]
private function encodestring($string)
{
$string = strtr($string,»абвгдеёзийклмнопрстуфхъыэ_», «abvgdeeziyklmnoprstufh’iei»);
$string = strtr($string,»АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_», «ABVGDEEZIYKLMNOPRSTUFH’IEI»);
$string = strtr($string, array(‘ж’ => ‘zh’, ‘ц’ => ‘ts’, ‘ч’ => ‘ch’, ‘ш’ => ‘sh’,
‘щ’ => ‘shch’,'ь’ => », ‘ю’ => ‘yu’, ‘я’ => ‘ya’,
‘Ж’ => ‘ZH’, ‘Ц’ => ‘TS’, ‘Ч’ => ‘CH’, ‘Ш’ => ‘SH’,
‘Щ’ => ‘SHCH’, ‘Ь’ => », ‘Ю’ => ‘YU’, ‘Я’ => ‘YA’,
‘ї’ => ‘i’, ‘Ї’ => ‘Yi’, ‘є’ => ‘ie’, ‘Є’ => ‘Ye’
)
);
return $string;
}
[php]
неужели не работает с утф???
проверь
у меня при загрузке файла функция (выше) обрабатывает название файла. еще не тестил работу
чо как маленький? strtr — однобайтовая функция, а ютф-8 — мультибайтовая кодировка.
Для utf-8 есть mb_string — прекрасно работает
чтото не пахнет в mbstring’e функией mb_strtr
http://docs.php.net/manual/en/function.range.php