Скрипт для транслитерации титлов

Тема в разделе "Разное", создана пользователем KHV, 15 мар 2011.

  1. KHV

    KHV New Member Пользователи

    Регистрация:
    15 мар 2011
    Сообщения:
    23
    Всем привет!
    Есть скрипт для транслитерации титлов (для формирования ЧПУ):

    HTML:
    <?
    function UpLow(&$string,$registr='up'){
    $upper = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $lower = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz'; 
    if($registr == 'up') $string = strtr($string,$lower,$upper); 
    else $string = strtr($string,$upper,$lower); 
    } //function UpLow(&$string,$registr='up')
    
    function rus2lat($s) { // Функция обратимой перекодировки кириллицы в транслит.
    // Сначала всё переводим в верхний регистр, причём не с помощью глючной strtoupper
    UpLow($s);
    //а потом только кириллицу в нижний 
    $s=str_replace("ЫА","yha",$s);
    $s=str_replace("ЫО","yho",$s);
    $s=str_replace("ЫУ","yhu",$s);
    $s=str_replace("Ё","yo",$s);
    $s=str_replace("Ж","zh",$s);
    $rus = "АБВГДЕЗИЙКЛМНОПРСТУФХЦ";
    $lat = "abvgdezijklmnoprstufxc";
    $s = strtr($s, $rus, $lat);
    $s=str_replace("Ч","ch",$s);
    $s=str_replace("Ш","sh",$s);
    $s=str_replace("Щ","shh",$s);
    $s=str_replace("Ъ","qh",$s);
    $s=str_replace("Ы","y",$s);
    $s=str_replace("Ь","q",$s);
    $s=str_replace("Э","eh",$s);
    $s=str_replace("Ю","yu",$s);
    $s=str_replace("Я","ya",$s);
    $s=str_replace(" ","-",$s); // сохраняем пробел от перехода в %20
    $s=str_replace(",","-",$s); // сохраняем запятую
    $s=str_replace('"','&quot;',$s); // сохраняем кавычки
    $s=rawurlencode($s); // Разрешённые символы URL - латинские буквы, точка, минус и подчёркивание 
    return $s; 
    } // function rus2lat($s)
    
    //$s = $_POST['data'];
    $s = "Отряд монтажников особого назначения";
    echo rus2lat($s);
    ?>
    если в скрипте
    $s = "Отряд монтажников особого назначения";
    echo rus2lat($s);
    то возращает в CD
    otryad_montazhnikov_osobogo_naznacheniya

    а если в скрипте
    $s = $_POST['data'];
    echo rus2lat($s);
    то возвращает в CD
    r%9Fr%BEr%B4-r%BBryor%BDs%83r%BAs%81r%BEr%BC-r%BDr%B5r%BBs%8Cr%B7s%8F--r%BDr%BE-r%B5s%81r%BBryo-r%BEs%87r%B5r%BDs%8C-s%85r%BEs%87r%B5s%82s%81s%8F--s%82r%BE-r%BCr%BEr%B6r%BDr%BE

    подскажите, плиз, как сделать транслитерацию правильно?
     
  2. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Некоторые функции PHP могут не работать с кириллицей.
    Я нашел выход проще. В программе есть функция поиск-замены (вкладка "контент").
    Включите ее и добавьте в нее следующее:
    Код:
    А|A
    Б|B
    В|V
    Г|G
    Д|D
    Е|E
    Ё|E
    Ж|J
    З|Z
    И|I
    Й|I
    К|K
    Л|L
    М|M
    Н|N
    О|O
    П|P
    Р|R
    С|S
    Т|T
    У|U
    Ф|Ph
    Х|H
    Ц|C
    Ч|Ch
    Ш|Sh
    Щ|Sh
    Ь|
    Ы|I
    Ъ|
    Э|E
    Ю|Yu
    Я|Ya
    а|a
    б|b
    в|v
    г|g
    д|d
    е|e
    ё|e
    ж|j
    з|z
    и|i
    й|i
    к|k
    л|l
    м|m
    н|n
    о|o
    п|p
    р|r
    с|s
    т|t
    у|u
    ф|ph
    х|h
    ц|c
    ч|ch
    ш|sh
    щ|sh
    ы|i
    ъ|
    э|e
    ь|
    ю|yu
    я|ya
    Оригинал: SBFactory – парсер контента, программа для наполнения интернет магазинов
    После обработки: SBFactory – parser kontenta, programma dlya napolneniya internet magazinov
    PS: Эту функцию можно применять как ко всем границам парсинга, так и к отдельным, так что она должна подойти под ваши нужды.
     
  3. KHV

    KHV New Member Пользователи

    Регистрация:
    15 мар 2011
    Сообщения:
    23
    интересно. спасибо, попробую.
     

Поделиться этой страницей