Еще откопал такой вариант:
<?PHP
// Замена графически похожих латинских букв на русские буквы в русских словах и наоборот
function RusLat ($text)
{
// Соответствие букв русского и латинского алфавита
$abc = array(
"a" => "а",
"A" => "А",
"c" => "с",
"C" => "С",
"e" => "е",
"E" => "Е",
"T" => "Т",
"H" => "Н",
"o" => "о",
"O" => "О",
"p" => "р",
"P" => "Р",
"k" => "к",
"K" => "К",
"x" => "х",
"X" => "Х",
"B" => "В",
"M" => "М",
"b" => "ь",
"r" => "г",
"y" => "у",
"Y" => "У"
);
// Незаменимые русские символы
$russian = "шщфыджэячибю";
// Незаменимые латинские символы
$latin = "qwisdfgjzv";
// Строка с результатом
$result = "";
// Разбиваем текст на слова и работаем с каждым словом
$words = split(" ", $text);
foreach ($words as $word) {
if (!preg_match("#[$latin]+#i", $word)) {
foreach ($abc as $lat => $rus) {
$word = str_replace($lat, $rus, $word);
}
} elseif (!preg_match("#[$russian]+#i", $word)) {
foreach ($abc as $lat => $rus) {
$word = str_replace($rus, $lat, $word);
}
}
$result .= $word." ";
}
return trim($result);
}
?>