Функция PHP транслитерации русскоязычного текста в транслит на английском и обратно.

  1. Что такое "Транслитерация".
  2. Проблеммы двусторонней транслитерации.
  3. Область применения транлитерации.
  4. Пример функции PHP для двусторонней транслитерации.
  5. DEMO: Транслитирация строк онлайн.

Транслитерация — это процесс преобразования текста из одной письменности в другую на манер произношения, а не перевода смыслового значения. Корни такого решения идут из попытки сформировать из символов одного языка строку, которая обеспечит близкое в произношении строки другого языка – «Транскрипция».

Транслитерация не подразумевает двухстороннее преобразование без коллизий из-за различий в символьных наборах языков, а в некоторых случаях и фундаментальных структурных отличий. В интернете живёт много обсуждений, споров, предложений и решений в попытке реализовать двухсторонний транслит с одного языка на другой и обратно без искажения начальной строки. Но панацеи пока не найдено, хотя есть очень интересные и близкие к тому решения. Подробнее здесь.

Транслитерация нашла применение в замене строк, написанных на языках отличных от английского переводом совпадающих по произношению символов и их связок в англоязычное представление. Так как практически всё ПО и языки программирования написаны на английском, то и общение с ними должно осуществляться на их родном языке. Например, названия файлов помещаемые на сервер предпочтительно переименовывать через транслит RU в EN, так как многие сервера не поймут русскоязычных имён файлов. Тоже действие желательно применять и к URL адресам.

В примере ниже приведена PHP функция для транслита RU в EN и обратно.

PHP
function transliterate($input, $toLatin = true) {
    $translitTable = array(
        'а' => 'a',   'б' => 'b',   'в' => 'v',   'г' => 'g',   'д' => 'd',
        'е' => 'e',   'ё' => 'e',   'ж' => 'zh',  'з' => 'z',   'и' => 'i',
        'й' => 'y',   'к' => 'k',   'л' => 'l',   'м' => 'm',   'н' => 'n',
        'о' => 'o',   'п' => 'p',   'р' => 'r',   'с' => 's',   'т' => 't',
        'у' => 'u',   'ф' => 'f',   'х' => 'h',   'ц' => 'c',   'ч' => 'ch',
        'ш' => 'sh',  'щ' => 'sch', 'ь' => '',    'ы' => 'y',   'ъ' => '',
        'э' => 'e',   'ю' => 'yu',  'я' => 'ya',
        'А' => 'A',   'Б' => 'B',   'В' => 'V',   'Г' => 'G',   'Д' => 'D',
        'Е' => 'E',   'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',   'И' => 'I',
        'Й' => 'Y',   'К' => 'K',   'Л' => 'L',   'М' => 'M',   'Н' => 'N',
        'О' => 'O',   'П' => 'P',   'Р' => 'R',   'С' => 'S',   'Т' => 'T',
        'У' => 'U',   'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',   'Ч' => 'Ch',
        'Ш' => 'Sh',  'Щ' => 'Sch', 'Ь' => '',    'Ы' => 'Y',   'Ъ' => '',
        'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya'
    );
    
    if ($toLatin) {
        return strtr($input, $translitTable);
    } else {//echo $input;
        $cyr  = array('а','б','в','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у', 
            'ф','х','ц','ч','ш','щ','ъ', 'ы','ь', 'э', 'ю','я',
            'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У',
            'Ф','Х','Ц','Ч','Ш','Щ','Ъ', 'Ы','Ь', 'Э', 'Ю','Я' );
        $lat = array( 'a','b','v','w','g','d','e','e','zh','z','i','y','k','l','m','n','o','p','r','s','t','u',
            'f' ,'h' ,'ts' ,'ch','sh' ,'sht' ,'i', 'y', 'y', 'e' ,'yu' ,'ya','A','B','V','G','D','E','E','Zh',
            'Z','I','Y','K','L','M','N','O','P','R','S','T','U',
            'F' ,'H' ,'Ts' ,'Ch','Sh' ,'Sht' ,'I' ,'Y' ,'Y', 'E', 'Yu' ,'Ya' );

    return $textlat = str_replace($lat, $cyr, $input);

    }
}

Пример использования:

PHP
$originalString = 'Привет, мир!';
$transliteratedToLatin = transliterate($originalString);
echo $transliteratedToLatin; // Output: "Privet, mir!"

$transliteratedToCyrillic = transliterate($transliteratedToLatin, false);
echo $transliteratedToCyrillic; // Output: "Привет, мир!"

В данном примере используются два метода транслита. В первом случае с помощью функции strtr транслируется строка на русском языке в английское представление. Во втором, происходит транслит строки на английском в русско-символьное представление с помощью str_replace и двух символьных массивов. В приведенном DEMO примере можно наблюдать возможные коллизии при двухстороннем транслите строки.

DEMO: Транслитирация строк онлайн.

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика