Подскажите хороший транслитератордля ЧПУ плиз

Статус
В этой теме нельзя размещать новые ответы.

Mendel

Гуру форума
Регистрация
27 Янв 2008
Сообщения
215
Реакции
65
Задача - из тайтла делать ЧПУ строку.
У меня функция есть, но она неудачная. Хочется лучше и в идеале устойчивую к разным кодировкам (у меня тупая замена символов из списка идет)
 
У Вас наверно такая функция:
PHP:
function imTranslite($str){
	// транслитерация корректно работает на страницах с любой кодировкой
	// (c)Imbolc http://php.imbolc.name

	static $tbl= array(
		'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
		'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
		'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
		'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
		'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
		'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
		'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
		'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"",
		'Ю'=>"YU", 'Я'=>"YA"
	);

    return strtr($str, $tbl);
}

с кодировками проблем не должно возникнуть, или были прецеденты?
 


Если хотите работу с разными кодировками, в принципе можно добавить их HEX коды для реплейса. Лишь бы не наложились разные кодировки друг на друга ;)
 
Выдрано из ВП
PHP:
public static function rusToLat($text, $type='gost')
    {
        $gost = array(
       "Є"=>"EH","І"=>"I","і"=>"i","№"=>"#","є"=>"eh",
       "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
       "Е"=>"E","Ё"=>"JO","Ж"=>"ZH",
       "З"=>"Z","И"=>"I","Й"=>"JJ","К"=>"K","Л"=>"L",
       "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
       "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"KH",
       "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
       "Ы"=>"Y","Ь"=>"","Э"=>"EH","Ю"=>"YU","Я"=>"YA",
       "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
       "е"=>"e","ё"=>"jo","ж"=>"zh",
       "з"=>"z","и"=>"i","й"=>"jj","к"=>"k","л"=>"l",
       "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
       "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"kh",
       "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
       "ы"=>"y","ь"=>"","э"=>"eh","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"
        );

        $iso = array(
       "Є"=>"YE","І"=>"I","Ѓ"=>"G","і"=>"i","№"=>"#","є"=>"ye","ѓ"=>"g",
       "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
       "Е"=>"E","Ё"=>"YO","Ж"=>"ZH",
       "З"=>"Z","И"=>"I","Й"=>"J","К"=>"K","Л"=>"L",
       "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
       "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"X",
       "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
       "Ы"=>"Y","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA",
       "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
       "е"=>"e","ё"=>"yo","ж"=>"zh",
       "з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
       "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
       "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
       "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
       "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"
        );


        return $type == 'gost'?strtr($title, $gost):strtr($title, $iso);
    }
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху