Транслитерация текста на 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().
Напишем небольшой скрипт, который можно будет потом подключать к скриптам, где нужно выполнить транслитерацию.
<?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
<?php
require("translit.php");
$s = "Привет! :)";
if ($_GET["enc"] == "latin") {
echo translit($s);
} else {
echo $s;
}
?>
При вызове скрипта через use.php?enc=latin — будет выдаваться "Privet! :)", при иных значениях enc — "Привет! :)".
P.S. Приведенный пример отличается простотой и незатейливостью. На то он и пример. Перед реализацией же транслитерации в условиях, приближенных к боевым, советую ознакомиться с моей статьей "Тотальная буферизация PHP-скриптов и... Светлое будущее" и узнать оттуда, как можно реализовать транслитерацию целых страниц "малой кровью".