Этот вопрос закрыт для ответов, так как повторяет вопрос Как объединить регулярные выражения?

Как написать функцию транслита?

Добрый день.

Нашел функцию транслита:

function translit($in, $out, $str) {
		$rus = array(' ', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж',  'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч',  'Ш',  'Щ',  'Ъ',  'Ы', 'Ь', 'Э', 'Ю',  'Я',  'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж',  'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч',  'ш',  'щ',   'ъ', 'ы', 'ь', 'э', 'ю',  'я');
		$lat = array('-', 'A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');
		
		if($in == "lat" and $out == "rus"){
			return str_replace($lat, $rus, $str);
		}
		
		if($in == "rus" and $out == "lat"){
			return str_replace($rus, $lat, $str);
		}		
		
	}


Раньше она меня устраивала, сейчас в транслите с английского на русский допускает ошибки
Пример: "shassi" транслит идет в "схасси", вместо желаемого "шасси"
Пример: "fioletovyy" транслит идет в "фиолетовйй", вместо желаемого "фиолетовый"

Можно как то изменить функцию или есть более достойные решения?
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Неправильная таблица транслита. У правильной однозначные сопоставления. Обработка идет начиная с самых длинных кусков к более коротким. Можно подсмотреть варианты таблиц на translit.ru
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы