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

Тема в разделе "PHP", создана пользователем Mendel, 15 мар 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Задача - из тайтла делать ЧПУ строку.
    У меня функция есть, но она неудачная. Хочется лучше и в идеале устойчивую к разным кодировкам (у меня тупая замена символов из списка идет)
     
  2. GrizliK

    GrizliK Создатель

    Регистр.:
    4 сен 2009
    Сообщения:
    47
    Симпатии:
    3
    У Вас наверно такая функция:
    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);
    }
    с кодировками проблем не должно возникнуть, или были прецеденты?
     
  3. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46

    Код из Zebrum Lite. Кодировка utf-8.
    PHP:
        static public function translit ($string)
        {
            static 
    $translit = array("\xd1\x91"=>"e","\xd0\xb9"=>"y","\xd1\x86"=>"ts","\xd1\x83"=>"u","\xd0\xba"=>"k","\xd0\xb5"=>"e","\xd0\xbd"=>"n","\xd0\xb3"=>"g","\xd1\x88"=>"sh","\xd1\x89"=>"shch","\xd0\xb7"=>"z","\xd1\x85"=>"kh","\xd1\x8a"=>"","\xd1\x84"=>"f","\xd1\x8b"=>"y","\xd0\xb2"=>"v","\xd0\xb0"=>"a","\xd0\xbf"=>"p","\xd1\x80"=>"r","\xd0\xbe"=>"o","\xd0\xbb"=>"l","\xd0\xb4"=>"d","\xd0\xb6"=>"zh","\xd1\x8d"=>"e","\xd1\x8f"=>"ya","\xd1\x87"=>"ch","\xd1\x81"=>"s","\xd0\xbc"=>"m","\xd0\xb8"=>"i","\xd1\x82"=>"t","\xd1\x8c"=>"","\xd0\xb1"=>"b","\xd1\x8e"=>"yu","\xd0\x81"=>"E","\xd0\x99"=>"Y","\xd0\xa6"=>"TS","\xd0\xa3"=>"U","\xd0\x9a"=>"K","\xd0\x95"=>"E","\xd0\x9d"=>"N","\xd0\x93"=>"G","\xd0\xa8"=>"SH","\xd0\xa9"=>"SHCH","\xd0\x97"=>"Z","\xd0\xa5"=>"KH","\xd0\xaa"=>"","\xd0\xa4"=>"F","\xd0\xab"=>"Y","\xd0\x92"=>"V","\xd0\x90"=>"A","\xd0\x9f"=>"P","\xd0\xa0"=>"R","\xd0\x9e"=>"O","\xd0\x9b"=>"L","\xd0\x94"=>"D","\xd0\x96"=>"ZH","\xd0\xad"=>"E","\xd0\xaf"=>"YA","\xd0\xa7"=>"CH","\xd0\xa1"=>"S","\xd0\x9c"=>"M","\xd0\x98"=>"I","\xd0\xa2"=>"T","\xd0\xac"=>"","\xd0\x91"=>"B","\xd0\xae"=>"YU",);
            return 
    strtr($string$translit);
        }

    Если хотите работу с разными кодировками, в принципе можно добавить их HEX коды для реплейса. Лишь бы не наложились разные кодировки друг на друга ;)
     
  4. lobzik

    lobzik

    Регистр.:
    8 авг 2006
    Сообщения:
    311
    Симпатии:
    49
    Выдрано из ВП
    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);
        }
        
     
Статус темы:
Закрыта.