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

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

lexxxter

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

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

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

Заранее спасибо.
 
В общих чертах:
PHP:
$content = file_get_contents('sitemap_file');
preg_match_all("/<a href=\"([^\"]+)\">/", $content, $pma);
foreach($pma[1] as $filename){
    $content = str_replace($filename, encodestring($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;
}
 
  • Заблокирован
  • #3
Как-то давно писал движок на заказ, там нужна была такая опция, делал так:
Код:
$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);
 
Вот из ДЛЕ функция, я её юзаю для построения урлов:
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 ($var, 0, 50);

            if (($temp_max = strrpos($var, '-')))  $var = substr ($var, 0, $temp_max);

      }

  return $var;
}
  
  echo "<b>".totranslit("название статьи").".html</b>";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху