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-скриптов и... Светлое будущее" и узнать оттуда, как можно реализовать транслитерацию целых страниц "малой кровью".