SiteMaker - Академия сайтостроительства | Разработка сайта
| Вёрстка сайта
| Веб программирование
| Интернет технологии
| Продвижение ресурса
| Инструментарий
карта сервера :: форум :: профайл :: авторам :: о сайте
Гид: SiteMaker.Ru » Веб программирование » PHP » Транслитерация и детранслитерация на РНР

Транслитерация и детранслитерация на РНР


Версия для печати
Приветствую моих многоуважаемых читателей. Сегодня мы поговорим о не очень сложной, но довольно полезной и интересной теме, а именно о воплощении технологии перевода текста в транслит, и обратно. Безусловно, как базовый язык мы возмем великий русский язык, и попытаемся перевести его на латиницу.

Что ж, сначала нужно определиться с алфавитом, на котором мы будем основываться во время написания приложения. Вариантов транслита бывает много, и конечно воплотить их все просто невозможно, так как иногда транслит не поддается страндартизации, и акцент идет на знание языка и ориентировку в контексте сказаного. Лично я использую следующую таблицу символов:

'yii'=>'ы',
'ji'=>'й',
'yo'=>'ё',
'ya'=>'я',
'shc'=>'щ',
'sh'=>'ш',
'ea'=>'я',
'ii'=>'й',
'zh'=>'ж',
'ch'=>'ч',
'iy'=>'ю',
'ts'=>'ц',
'u'=>'у',
'w'=>'в',
'v'=>'в',
'i'=>'и',
'y'=>'у',
'd'=>'д',
't'=>'т',
'b'=>'б',
'p'=>'п',
'n'=>'н',
'f'=>'ф',
'\''=>'ь',
'\''=>'ъ',
'z'=>'з',
'l'=>'л',
'k'=>'к',
's'=>'с',
'm'=>'м',
'r'=>'р',
's'=>'с',
'h'=>'х',
'j'=>'ж',
'g'=>'г',
'_'=>'',
'a'=>'а'

Так же, есть некоторые моменты. К примеру, если название является контекстным, и не подлежит траслитерации, то перед ним нужно ставить символ '->', который будет говорить интерпретатору о том, что это слово не подлежит транслитерации. Так же в моей интерпретации транслита, символы `ь` и `ъ` будут интерпретироваться как `-`. Вот и все, это были все специфические моменты.

Теперь давайте напишим небольшое приложение, которое как раз и будет производить транслитерацию текста:

<?php

function Translit($text){
$data=explode(" ",$text);
$alphas=array(
'yii'=>'ы',
'ji'=>'й',
'yo'=>'ё',
'ya'=>'я',
'shc'=>'щ',
'sh'=>'ш',
'ea'=>'я',
'ii'=>'й',
'zh'=>'ж',
'ch'=>'ч',
'iy'=>'ю',
'ts'=>'ц',
'u'=>'у',
'w'=>'в',
'v'=>'в',
'i'=>'и',
'y'=>'у',
'd'=>'д',
't'=>'т',
'b'=>'б',
'p'=>'п',
'n'=>'н',
'f'=>'ф',
'\''=>'ь',
'\''=>'ъ',
'z'=>'з',
'l'=>'л',
'k'=>'к',
's'=>'с',
'm'=>'м',
'r'=>'р',
's'=>'с',
'h'=>'х',
'j'=>'ж',
'g'=>'г',
'_'=>'',
'a'=>'а'
);

$total='';
foreach($data as $k=>$v){
	foreach($alphas as $id=>$value){
		if(strcasecmp($v,$value) AND !eregi("->",$v)){
			$v=str_replace($value,$id,$v);
		}elseif(eregi("->",$v)){
			$v=str_replace("->","",$v);
		}
	}
	$total.=$v." ";
}
return $total;
}
?>
Теперь давайте немного подробней поговорим об исходнике.

Сначала мы разбиваем текст по отдельным словам, то есть по пробелам, для более удобного перевода. После мы инициируем массив со значениями алфавита.

Далее мы создаем переменную $total, которая и будет содержать обработанный текст. После этого идет сам процесс обработки. Для этого мы производим перебор нашего массива слов, и обрабатываем каждый элемент по очереди. Первым нашим шагом будет разбивка массива символов на латиницу и кириллицу. Этот метод очень удобен, так как для перевода транслитерации в детранслитерацию, нам всего лишь нужно поменять порядок перебора. Теперь если слово содержит тот или иной символ таблицы символов, мы заменяем его альтернативой. Если будет найдена конструкция `->`, то мы удаляем ее и не производим обработки.

После этого мы просто составляем строку $total, и возвращаем ее в качестве результата работы функции. Как видите, особой сложности в этом нет. Все довольно просто.

Вот мы и прошли первый этап разработки, теперь нам еще осталось создать процедуру детранслитерации, а то есть перевода латиницы в кириллицу.

Как я уже говорил, это делается очень просто. Для этого мы введем необязательный параметр в функцию Translit(), а именно $type. Параметр $type будет носить тип производимых действий (в латиницу или обратно).

Что ж, вот что получилось у меня:

<?php

function Translit($text,$type='de'){
$data=explode(" ",$text);
if(count($data)==''){
	return '';
}
$alphas=array(
'yii'=>'ы',
'ji'=>'й',
'yo'=>'ё',
'ya'=>'я',
'shc'=>'щ',
'sh'=>'ш',
'ea'=>'я',
'ii'=>'й',
'zh'=>'ж',
'ch'=>'ч',
'iy'=>'ю',
'ts'=>'ц',
'u'=>'у',
'w'=>'в',
'v'=>'в',
'i'=>'и',
'y'=>'у',
'd'=>'д',
't'=>'т',
'b'=>'б',
'p'=>'п',
'n'=>'н',
'f'=>'ф',
'\''=>'ь',
'\''=>'ъ',
'z'=>'з',
'l'=>'л',
'k'=>'к',
's'=>'с',
'm'=>'м',
'r'=>'р',
's'=>'с',
'h'=>'х',
'j'=>'ж',
'g'=>'г',
'_'=>'',
'a'=>'а'
);
$total='';
foreach($data as $k=>$v){
	if(preg_match("/^[a-zA-Z]*/",$v)){
		foreach($alphas as $id=>$value){
			if($type=='de'){
				if(strcasecmp($v,$id) AND !eregi("->",$v)){
					$v=str_replace($id,$value,$v);
				}elseif(eregi("->",$v)){
					$v=str_replace("->","",$v);
				}
			}elseif($type='translit'){
				if(strcasecmp($v,$value) AND !eregi("->",$v)){
					$v=str_replace($value,$id,$v);
				}elseif(eregi("->",$v)){
					$v=str_replace("->","",$v);
				}
			}
		}
	}
	$total.=$v." ";
}
return $total;
}
?>
Как видите, для детранслитеризации мы просто во время перебора делаем проверку параметра, и в соответствии от его значения мы делаем замену (id на value, или value на id соответственно). Я считаю, что на этом можно закончить.

Потестируйте, подлатайте где посчитаете нужным - все, как говорится, в ваших руках!


Автор: К.КарпенкоДата публикации: 15.09.2006
Рейтинг статьи: [3.92] рейтинг статьи: 3.92рейтинг статьи: 3.92рейтинг статьи: 3.92рейтинг статьи: 3.92 [голосов: 13]Кол-во просмотров: 15693
Оценить статью: Установите cookies!

Ваши комментарии:

Ваше имя:*
Ваш E-mail:
Ваш URL:
HTML запрещен
BB Код разрешен


Ваше сообщение:*
* - обязательные поля для заполнения

Внимание!
Перед появлением сообщения на сайте, оно пройдет премодерацию.

Поиск по сайту:

Последние статьи:
Работа с WDDX в РНР Работа с WDDX в РНР
Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP Ночные мытарства спеца по раскрутке, или постраничный вывод контента в браузер на примере PHP
Создаем PHP отладчик своими руками. Часть 2 Создаем PHP отладчик своими руками. Часть 2
Создаем PHP отладчик своими руками. Часть 1 Создаем PHP отладчик своими руками. Часть 1
Введение в регулярные выражения Введение в регулярные выражения
» архив всех статей
Схожая тематика:
:: Perl/CGI
:: ASP
:: JavaScript и VBScript

Академия веб мастеринга и веб дизайна. Разработка сайта, вёрстка сайта, веб программирование, продвижение ресурса, инструментарий и другие темы, посвященные разработке ресурсов в сети Интернет. Форум для веб мастера.


карта сервера :: форум :: профайл :: авторам :: о сайтеНаверх
Rambler's Top100Rambler's Top100 Valid HTML 4.01! © 2000-2016 Все права защищены
страница создана за 0.012 секунд
На главную страницуDeveloped by SiteMaker