БлогNot. Ещё раз о транслите

Ещё раз о транслите

Конечно, делать вот такой перевод кириллицы в транслит, какого мне когда-то хватало, сегодня уже не нужно - просто потому, что при традиционном способе нет простого взаимно однозначного преобразования символов "туда" и "обратно", например, если "щ" это "sch", но "ch" при этом ещё и "ч".

На этот случай, чтобы не изобретать велосипед, уже существует ГОСТ 7.79-2000 на транслитерацию, берём его и пользуемся.

Вот здесь можно почитать побольше занудства про умляуты и большие буквы и получить более "мощный" код, но если нужны только "классическая" латиница и русская кириллица, хватит и простого класса, листинг которого с примером вызова приложен ниже.

<?php
 class Translit {
  public $cyr2lat_replacements = array (
    "А" => "A","Б" => "B","В" => "V","Г" => "G","Д" => "D",
    "Е" => "E","Ё" => "YO","Ж" => "ZH","З" => "Z","И" => "I",
    "Й" => "J","К" => "K","Л" => "L","М" => "M","Н" => "N",
    "О" => "O","П" => "P","Р" => "R","С" => "S","Т" => "T",
    "У" => "U","Ф" => "F","Х" => "X","Ц" => "CZ","Ч" => "CH",
    "Ш" => "SH","Щ" => "SHH","Ъ" => "``","Ы" => "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","х" => "x","ц" => "cz","ч" => "ch",
    "ш" => "sh","щ" => "shh","ъ" => "``","ы" => "y'","ь" => "`",
    "э" => "e`","ю" => "yu","я" => "ya"
   );
   public function cyr2lat ($text) {
    return strtr ($text,$this->cyr2lat_replacements);
   }
   public function lat2cyr ($text) {
    return strtr ($text,array_flip($this->cyr2lat_replacements));
   }
 }

 $t = new Translit();
 $text_cyr = "Съешь же ещё этих мягких французских булок, да выпей чаю";
 $text_lat = $t->cyr2lat($text_cyr);
 echo $text_lat;
 $text_cyr = $t->lat2cyr($text_lat);
 echo '<br>'.$text_cyr;
?>

Тестировался скрипт в Юникоде (UTF-8), вывел вот что:

S``esh` zhe eshhyo e`tix myagkix franczuzskix bulok, da vy'pej chayu
Съешь же ещё этих мягких французских булок, да выпей чаю

Также для удобства добавлю табличку транслитерации символов кириллицы по ГОСТ 7.79-2000 (Система Б).

а a
б b
в v
г g
д d
е e
ё yo
ж zh
з z
и i, i'
й j
к k
л l
м m
н n
о o
п p
р r
с s
т t
у u
ф f
х x
ц cz, c
ч ch
ш sh
щ shh
ъ ``
ы y'
ь `
э e`
ю yu
я ya

05.12.2018, 16:34 [1675 просмотров]


теги: php textprocessing программирование форматы

К этой статье пока нет комментариев, Ваш будет первым