транслитерация ЧПУ

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Shady07, 10 июл 2009.

Статус темы:
Закрыта.
  1. Shady07

    Shady07 Постоялец

    Регистр.:
    19 май 2008
    Сообщения:
    50
    Симпатии:
    14
    Доброго всем времени суток. Я сделал на сайте обычное ЧПУ, т.е. вида http://site.com/News/PRIVET-ETO-TEST/ Хотелось бы видеть русские символы вместо транслита. Погуглил, нашол инфу, где это вроде можно изменить, залез в файл utils.php, вот кусок кода:
    PHP:
    function utils_makeUrlFriendly($input)
    {
        
    $trans=array(
            
    "А" => "A",
            
    "Б" => "B",
            
    "В" => "V",
            
    "Г" => "G",
            
    "Д" => "D",
            
    "Е" => "E",
            
    "Ё" => "YO",
            
    "Ж" => "ZH",
            
    "З" => "Z",
            
    "И" => "I",
            
    "Й" => "J",
            
    "К" => "K",
            
    "Л" => "L",
            
    "М" => "M",
            
    "Н" => "N",
            
    "О" => "O",
            
    "П" => "P",
            
    "Р" => "R",
            
    "С" => "S",
            
    "Т" => "T",
            
    "У" => "U",
            
    "Ф" => "F",
            
    "Х" => "H",
            
    "Ц" => "TS",
            
    "Ч" => "CH",
            
    "Ш" => "SH",
            
    "Щ" => "SCH",
            
    "Ъ" => "",
            
    "Ы" => "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",
            
    "х" => "h",
            
    "ц" => "ts",
            
    "ч" => "ch",
            
    "ш" => "sh",
            
    "щ" => "sch",
            
    "ъ" => "",
            
    "ы" => "y",
            
    "ь" => "",
            
    "э" => "e",
            
    "ю" => "yu",
            
    "я" => "ya",
            
    "№" => "No.",
            
    //ukranian symbols added
            
    'Ї' => 'I',
            
    'І' => 'I',
            
    'Є' => 'E',
            
    'ї' => 'i',
            
    'і' => 'i',
            
    'є' => 'e',
            );
        
    $input=strtr($input$trans);
        return 
    $input;
    }
    function 
    makeUrlFriendly($input$isPage=false) {
        global 
    $db;
        
    //$input = remove_error_creating_chars($input);
        
    $output utf8_substr($input0240);
        
    $output utf8_strtolower($output);
        
    $output trim($output);    
        
    $output html_entity_decode(htmlentities($outputENT_COMPAT'UTF-8'));
        
    $output preg_replace("/\s/e" "_" $output);     // Replace spaces with underscores
        
    $output str_replace("--""-"$output);      
        
    $output str_replace("/"""$output);
        
    $output str_replace("\\"""$output);
        
    $output str_replace("'"""$output);      
        
    $output str_replace(","""$output);      
        
    $output str_replace(";"""$output);      
        
    $output str_replace(":"""$output);      
        
    $output str_replace(".""-"$output);      
        
    $output str_replace("?"""$output);      
        
    $output str_replace("=""-"$output);      
        
    $output str_replace("+"""$output);      
        
    $output str_replace("$"""$output);      
        
    $output str_replace("&"""$output);      
        
    $output str_replace("!"""$output);      
        
    $output str_replace(">>""-"$output);      
        
    $output str_replace(">""-"$output);      
        
    $output str_replace("<<""-"$output);      
        
    $output str_replace("<""-"$output);      
        
    $output str_replace("*"""$output);      
        
    $output str_replace(")"""$output);      
        
    $output str_replace("("""$output);
        
    $output str_replace("["""$output);
        
    $output str_replace("]"""$output);
        
    $output str_replace("^"""$output);
        
    $output str_replace("%"""$output);
        
    $output str_replace("»""-"$output);
        
    $output str_replace("|"""$output);
        
    $output str_replace("#"""$output);
        
    $output str_replace("@"""$output);
        
    $output str_replace("`"""$output);
        
    $output str_replace("”"""$output);
        
    $output str_replace("“"""$output);
        
    $output str_replace("\""""$output);
        
    $output str_replace("_""-"$output);       
        if(
    function_exists('utils_makeUrlFriendly')) {
            
    $output utils_makeUrlFriendly($output);
        }
       
    подскажите, где что нужно подправить/изменить? И надо ли в .htaccess что-либо добавлять?
     
  2. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Закоментируй первую функцию (utils_makeUrlFriendly) и будут у тебя урлы не транслитом, а русским :)

    В .htaccess скорее всего ничего менять не нужно, но возможно понадобится поменять в index.php

    Если так не заработает, кинь сюда свой .htaccess, будем разбираться дальше
     
    Shady07 нравится это.
  3. ConstNW

    ConstNW Постоялец

    Регистр.:
    30 июн 2007
    Сообщения:
    132
    Симпатии:
    39
    В php есть функции urldecode и urlencode

    Входящий запрос преобразуешь с помощью urldecode.
    Url всех ссылок с русскими буквами надо преобразовывать с помощью urlencode.
     
  4. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    Заметь, что не все браузеры правильно понимают русские символы в адресной строке.
    Может так получиться, что в адресной строке русские символы будут url-кодированы типа http://ru.wikipedia.org/wiki/ГОСТ, либо, как в FF3.5, ссылки будут преобразованы к такому виду, если их скопировать в буфер обмена.

    Поэтому, я предпочитаю, чтобы ссылки были транслитом (переведенным по одному из гостов), тогда никаких проблем не возникает — url всегда красив. А поисковые систему умеют подсвечивать ключевые слова в url даже если они транслитом в url. Пруфлинк

    UPD:
    Кстати, а что это за движок? Самописный?
     
  5. Shady07

    Shady07 Постоялец

    Регистр.:
    19 май 2008
    Сообщения:
    50
    Симпатии:
    14
    Ага, я тоже это заметил, в опере, что в линке %-знаки есть. Так что обратно на транслит перейду, благо пока тестирую систему. Движок Pligg CMS, по типу digg.com.
     
Статус темы:
Закрыта.