перекодирование в "англо-подобную" строку

phpman

Новичок
перекодирование в "англо-подобную" строку

Пытаюсь сделать функцию, которая переводит все символы строки (включая те, что не набираются на англо-язычной клавиатуре) в их английское визуальное подобие. То есть на выходе должна быть строка, в которой есть только знаки пунктуации, пробелы и англицкие символы (всего 52 есесенно), даже если на входе была строка, например, набранная на чешском языке. Собственно, функцию-то написал. У меня это выглядит так:

function string_to_eng($stroka) {

$stroka = ereg_replace("È","E",$stroka);
$stroka = ereg_replace("É","E",$stroka);

# и т.д. около 400 строк (ужас, правда?)

return $stroka;
}

Вопрос же в том, а не изобретаю ли я велосипед? Может подобная функция уже давно существует?

P.S. Не бейте, если вдруг кто-то уже спрашивал об этом здесь прежде. :)
 

GameMAN

Новичок
ты хочешь получить из "Строка" => "Stroka"???

Если да, то помогу!
 

phpman

Новичок
Да нет, я хочу, например, так:
"Vojtěch Pokorný" => "Vojtech Pokorny"
Все несколько сложнее в общем.
 

Фанат

oncle terrible
Команда форума
нет, не существует.
а строк может быть всего три.
см [m]str_tr[/m]
 

svetasmirnova

маленький монстрик
phpman
Derick Rethans расширение делал. Посмотри на derickrethans.nl
А вообще самому написать 10 минут.
 

kruglov

Новичок
Как мысль - переводим в entity, а там дальше берем второй символ. &аuml; -> a, &Оuml; -> O и т.д.

Идея необдуманная, может, есть какие буквенные ентити, что правилам не подчинятся...
 

phpman

Новичок
Вся беда в том, что есть очень много символов, задаваемых в виде & # [some digits] ; и все их надо предусмотреть, так как в разных языках они могут означать какую-то букву. Я попробовал то, что предлагается на http://www.php.net/str_tr, но работает не для всех ситуаций. Срабатывает для чешского и словацкого языков, но не для испанского. Я еще не все опробовал.
То, что написал я (см. выше) работает, но меня самого функция пугает своей громоздкостью. Поэтому как начинающий программист прошу совета, как хотя бы сделать так, чтобы функция работала как можно быстрее: что лучше использовать внутри: str_tr или preg_replace или есть что-то еще круче? Ускорит ли ее работу организация всех "неанглийских" символов в массив или можно и как у меня - куча последовательных вызовов одной и той же функции?
 

svetasmirnova

маленький монстрик
strtr лучше потому, что не регулярное выражение. Массив лучше, потому что тебе будет его проще "забить". И по скорости скорее всего тоже, но я могу ошибаться: не считала :)
 

phpman

Новичок
Спасибо всем и отдельно Фанату и Свете за совет. Пошел все додумывать и исправлять. :)
Если кто еще что-то придумает - кидайте идеи, читаю все с большим интересом.
 

kvf77

Red Devil
phpman

Как пример. Необязательно понимать букваль - массивы могут содержать разное
PHP:
function transliterate($input) {
	$arrRus = array ('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я', ' ', '/', '\\', '\'');
	$arrEng = array ('a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'kh', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'ju', 'ja', '_', '_', '_');
	$result = str_replace($arrRus, $arrEng, $input);

	return $result;
}
 

phpman

Новичок
Автор оригинала: SiMM
А [m]function.iconv[/m] с TRANSLIT разве не этим занимается?
По-моему, не то. Мне же на выходе нужны только английские буквы, а разве есть такая кодировка, где только 52 английских символа?
 
Сверху