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

  • Автор темы Автор темы phpman
  • Дата начала Дата начала

phpman

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

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

function string_to_eng($stroka) {

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

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

return $stroka;
}

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

P.S. Не бейте, если вдруг кто-то уже спрашивал об этом здесь прежде. :-)
 
ты хочешь получить из "Строка" => "Stroka"???

Если да, то помогу!
 
Да нет, я хочу, например, так:
"Vojtěch Pokorný" => "Vojtech Pokorny"
Все несколько сложнее в общем.
 
нет, не существует.
а строк может быть всего три.
см [m]str_tr[/m]
 
phpman
Derick Rethans расширение делал. Посмотри на derickrethans.nl
А вообще самому написать 10 минут.
 
Как мысль - переводим в entity, а там дальше берем второй символ. &аuml; -> a, &Оuml; -> O и т.д.

Идея необдуманная, может, есть какие буквенные ентити, что правилам не подчинятся...
 
Вся беда в том, что есть очень много символов, задаваемых в виде & # [some digits] ; и все их надо предусмотреть, так как в разных языках они могут означать какую-то букву. Я попробовал то, что предлагается на http://www.php.net/str_tr, но работает не для всех ситуаций. Срабатывает для чешского и словацкого языков, но не для испанского. Я еще не все опробовал.
То, что написал я (см. выше) работает, но меня самого функция пугает своей громоздкостью. Поэтому как начинающий программист прошу совета, как хотя бы сделать так, чтобы функция работала как можно быстрее: что лучше использовать внутри: str_tr или preg_replace или есть что-то еще круче? Ускорит ли ее работу организация всех "неанглийских" символов в массив или можно и как у меня - куча последовательных вызовов одной и той же функции?
 
strtr лучше потому, что не регулярное выражение. Массив лучше, потому что тебе будет его проще "забить". И по скорости скорее всего тоже, но я могу ошибаться: не считала :)
 
Спасибо всем и отдельно Фанату и Свете за совет. Пошел все додумывать и исправлять. :)
Если кто еще что-то придумает - кидайте идеи, читаю все с большим интересом.
 
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;
}
 
Автор оригинала: SiMM
А [m]function.iconv[/m] с TRANSLIT разве не этим занимается?
По-моему, не то. Мне же на выходе нужны только английские буквы, а разве есть такая кодировка, где только 52 английских символа?
 
Сверху