помогите реализовать транслит имен файлов в катре сайта.

Тема в разделе "Как сделать...", создана пользователем lexxxter, 4 янв 2009.

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

    lexxxter Постоялец

    Регистр.:
    20 мар 2008
    Сообщения:
    96
    Симпатии:
    31
    Есть много статей вида: название_статьи.html
    Нужно реализовать html страничку со списком этих статей, чтоб сам список был с русским названиями статей (как имена файлов), а ссылки на странички были на транслите.
    Результат: <a href="nazvanie_stati.html">название_сатьи.html</a>

    Буду признателен хотя бы за подсказку как реализовать транслит имени файла взятого в кавычки.
    Пример: <a href="название_сатьи.html">название_сатьи.html</a> -> <a href="nazvanie_stati.html">название_сатьи.html</a>

    т.е. любые способы достижения вышеуказанного результата.

    Заранее спасибо.
     
  2. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    В общих чертах:
    PHP:
    $content file_get_contents('sitemap_file');
    preg_match_all("/<a href=\"([^\"]+)\">/"$content$pma);
    foreach(
    $pma[1] as $filename){
        
    $content str_replace($filenameencodestring($filename), $content);
    }
    file_put_content('newsitemap');
    Функция перевода в транслит:
    PHP:
      function encodestring($st)
      {
        
    // Сначала заменяем "односимвольные" фонемы.
        
    $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
        
    "abvgdeeziyklmnoprstufh'iei");
        
    $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
        
    "ABVGDEEZIYKLMNOPRSTUFH'IEI");
        
    // Затем - "многосимвольные".
        
    $st=strtr($st
                        array(
                            
    "ж"=>"zh""ц"=>"ts""ч"=>"ch""ш"=>"sh"
                            
    "щ"=>"shch","ь"=>"""ю"=>"yu""я"=>"ya",
                            
    "Ж"=>"ZH""Ц"=>"TS""Ч"=>"CH""Ш"=>"SH"
                            
    "Щ"=>"SHCH","Ь"=>"""Ю"=>"YU""Я"=>"YA",
                            
    "ї"=>"i""Ї"=>"Yi""є"=>"ie""Є"=>"Ye"
                            
    )
                 );
        
    // Возвращаем результат.
        
    return $st;
    }
     
    lexxxter нравится это.
  3. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Как-то давно писал движок на заказ, там нужна была такая опция, делал так:
    Код:
    $latin = str_replace(array("й","ц","у","к","е","н","г","ш","щ","з","х","ъ","ф","ы","в","а","п","р","о","л","д","ж","э","я","ч","с","м","и","т","ь","б","ю"), array("i","c","u","k","e","n","g","sh","ssh","z","h","","f","yi","v","a","p","r","o","l","d","j","e","ya","ch","s","m","i","t","","b","yu"), $latin);
    $latin = str_replace(array("Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю"), array("i","c","u","k","e","n","g","sh","ssh","z","h","","f","yi","v","a","p","r","o","l","d","j","e","ya","ch","s","m","i","t","","b","yu"), $latin);
     
    lexxxter нравится это.
  4. Lonely Wolf

    Lonely Wolf Прохожие

    Вот из ДЛЕ функция, я её юзаю для построения урлов:
    PHP:
    function totranslit($var)
    {
            
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
            
    $NpjLettersTo   "abvgdeziklmnoprstufcyi";
            
    $NpjBiLetters = array( 
          
    "й" => "jj""ё" => "jo""ж" => "zh""х" => "kh""ч" => "ch"
          
    "ш" => "sh""щ" => "shh""э" => "je""ю" => "ju""я" => "ja",
          
    "ъ" => """ь" => """ї" => "yi""є" => "ye",
                                  );

            
    $NpjCaps  "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
            
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";

          
    $var str_replace(".php"""$var);
          
    $var trim(strip_tags($var));
          
    $var preg_replace"/\s+/ms""-"$var );
          
    $var strtr$var$NpjCaps$NpjSmall );
          
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
          
    $var strtr$var$NpjBiLetters );

          
    $var preg_replace("/[^a-z0-9\_\-.]+/mi"""$var);
          
    $var=preg_replace('#[\-]+#i''-'$var);
          
    $var strtolower $var );

          if (
    strlen($var) > 50) {

            
    $var substr ($var050);

                if ((
    $temp_max strrpos($var'-')))  $var substr ($var0$temp_max);

          }

      return 
    $var;
    }
      
      echo 
    "<b>".totranslit("название статьи").".html</b>";
     
Статус темы:
Закрыта.