Транслитерация урлов

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 22 ноя 2011.

Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Есть функция транслитерации урлов из заголовков статей
    PHP:
    function translitIt($str
    {
        
    $tr = array(
            
    "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
            
    "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
            
    "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
            
    "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
            
    "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
            
    "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
            
    "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
            
    "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
            
    "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
            
    "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
            
    "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
            
    "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
            
    "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
            
    " "=> "_""."=> """/"=> "_"
        
    );
        return 
    strtr($str,$tr);
    }
    Подскажите, пожалуйста, как её модифицировать так, чтобы все символы, которые не попали в список, просто удалялись.
     
  2. AlexMist

    AlexMist Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    7
    Google много чего выдает, например так.

    Код:
    function translitIt($str)   {
    //оставляем все буквы английского алфавита, русского и пробелы
             $str = preg_replace("/[^\w
    АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщыъьэюя]/","",$str);
    //заменили пробелы
             $title = str_replace(" ","-",$title);
             $title = str_replace("--","-",$title);
    $tr = array( 
            "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g", 
            "Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i", 
            "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n", 
            "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t", 
            "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch", 
            "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"", 
            "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b", 
            "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j", 
            "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", 
            "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", 
            "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", 
            "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y", 
            "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",  
            " "=> "_", "."=> "", "/"=> "_" 
    ); 
    
    
            return strtr($str,$tr); 
    }
    
    
     
  3. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    Держите, функция честно выдернута из dle работает без нареканий, пример тому огромное количество сайтов на этом двиге
    PHP:
    function totranslit($var$lower true$punkt true) {
        
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
        
    $NpjLettersTo "abvgdeziklmnoprstufcyi";
        
    $NpjBiLetters = array ("й" => "j""ё" => "yo""ж" => "zh""х" => "x""ч" => "ch""ш" => "sh""щ" => "shh""э" => "ye""ю" => "yu""я" => "ya""ъ" => """ь" => """ї" => "yi""є" => "ye" );
        
    $NpjCaps "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
        
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
        
    $var str_replace".php"""$var );
        
    $var trimstrip_tags$var ) );
        
    $var preg_replace"/\s+/ms""-"$var );
        
    $var strtr$var$NpjCaps$NpjSmall );
        
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
        
    $var strtr$var$NpjBiLetters );
        if ( 
    $punkt $var preg_replace"/[^a-z0-9\_\-.]+/mi"""$var );
        else 
    $var preg_replace"/[^a-z0-9\_\-]+/mi"""$var );
        
    $var preg_replace'#[\-]+#i''-'$var );
        if ( 
    $lower $var strtolower$var );
        if( 
    strlen$var ) > 50 ) {
            
    $var substr$var050 );
            if( (
    $temp_max strrpos$var'-' )) ) $var substr$var0$temp_max );
        }
        return 
    $var;
    }
     
    LEXAlForpostl нравится это.