Web - кодинг: PHP:


Транслит



  Автор: Александр Рябов
  Источник:

Варкалось. Хливкие шорьки
Пырялись по наве,
И хрюкотали зелюки,
Как мюмзики в мове.
Льюис Кэрролл. "Бармаглот".



Транслит... Какое томное, волнующее слово! Вот и поговорим немного о транслитерации. Пишем wap-сайт? Без транслита - никуда. Только посетителей терять.

Как же грамотно выполнить транслитерацию в PHP? А очень просто! В этом нам поможет функция strtr(). Отличная, скажу я вам, функция!
Имеет два формата вызова:

string strtr ( string str, string from, string to)
- для замены типа "символ-на-символ". Возвращается копия строки str, в которой символ from[i] заменен на символ to[i] для всех допустимых i.
string strtr ( string str, array replace_pairs)
- для замены типа "строка-на-строку". В массиве replace_pairs описаны возможные замены. Ключ элемента массива - это то, что заменяется, а значение элемента массива с этим ключом - то, на что заменяется. Возвращается копия строки str, с выполненными заменами.

Т.к. в транслите некоторые кириллические символы записываются двумя и более символами (ш = sh и т.д.), то будем использовать второй формат вызова strtr().

Напишем небольшой скрипт, который можно будет потом подключать к скриптам, где нужно выполнить транслитерацию.

Файл translit.php
<?
  $tr = array(
   "Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
   "і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
   "ї"=>"yi","А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
   "Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
   "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
   "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
   "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
   "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
   "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
   "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
   "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
   "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
   "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
   "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
   "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
  );
  
  function translit( $cyr_str) {
   global $tr;
   return strtr($cyr_str,$tr);
  }
?>
Пример использования.
Файл use.php
<?
   require("translit.php");
   $s = "Привет! :)";
   if ($HTTP_GET_VARS["enc"]=="latin")
    echo translit($s);
   else
    echo $s;
?>

При вызове скрипта через use.php?enc=latin - будет выдаваться "Privet! :)", при иных значениям enc - "Привет! :)".

P.S. Приведенный пример отличается простотой и незатейливостью. На то он и пример. Перед реализацией же транслитерации в условиях, приближенных к боевым, советую ознакомиться с моей статьей "Тотальная буферизация PHP-скриптов и... Светлое будущее" и узнать оттуда, как можно реализовать транслитерацию целых страниц "малой кровью".


Александр Рябов. Сентябрь 2004, Украина.






При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz