[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Транслиты
HIDDENSY
Всем привет
Использование функции транслита.

PHP
function translite($text){
    
$lat=Array('a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','jj','yi','j','ye','yu','ya','A','B','V','G','D','E','Yo','Zh','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sch','jj','Yi','j','Ye','Yu','Ya','-','-' ,'-'    ,'-','-','-','-','-','-','' ,'' ,''  ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''  ,'' ,'' ,'' ,'');
$rus=Array('а','б','в','г','д','е','ё' ,'ж' ,'з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч' ,'ш' ,'щ'  ,'ъ' ,'ы' ,'ь','э' ,'ю' ,'я' ,'А','Б','В','Г','Д','Е','Ё' ,'Ж' ,'З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч' ,'Ш' ,'Щ'  ,'Ъ' ,'Ы' ,'Ь','Э' ,'Ю' ,'Я' ,' ','\n','    ','.',',','!','?',':',';','«','»','\'','"',')','(','*','%','$','#','\\','/','>','<','&');
    
$textlat=str_replace($rus,$lat,$text);
    return 
$textlat;
}


Все бы вроде хорошо, но вот если с русского -> английский -> русский, то получается мягко говоря фигня.

Вот пример:

предотвращению негативного воздействия ->
predotvrascheniyu-negativnogo-vozdeystviya ->
предотврасцхенийу негативного воздействийа


Как сделать более жесткий вариант, что-бы слово в слово и букву в букву конвертировал?




Спустя 3 часа, 10 минут, 28 секунд (22.10.2009 - 10:17) twin написал(а):
Никак. Транслитерация при использовании многосимвольных фонемов однонаправлена. Обратному преобразованию не подлежит. Это издержки разницы количества букв в алфавитах.

Спустя 4 минуты, 58 секунд (22.10.2009 - 10:22) glock18 написал(а):
Теоретически возможно. Если заменять начинать с последовательностей символов, которые не входят в другие последовательности. То есть сначала sch, а уже потом ch и т.д.

Есть один таки минус, если
sch = щ
ch = ч
s = с

то получится
считать =>
schitat' =>
щитать

то есть эти ситуации тоже надо как-то предусмотреть.

Спустя 1 час, 5 секунд (22.10.2009 - 11:22) HIDDENSY написал(а):
Эксперты, Вы иногда отписываетесь так, что я в стопор вхожу. Я же не профи в PHP я только учусь еще. Поэтому в этой ветке и задаю вопросы.

Вот что я сам написал, посмотрите и если есть ошибки укажите на них, а лучьше сразу исправленный вариант.

PHP
function transliteLat($text){

    
$text=strtr($text,"абвгдезийклмнопрстуфхць","abvgdeziyklmnoprstufhcj");
    
$text=strtr($text,"АБВГДЕЗИЙКЛМНОПРСТУФХЦЬ","ABVGDEZIYKLMNOPRSTUFHCJ");

    
$latsmall=Array('jo','zh','ch','sh','scH','jj','bi','ye','yu','ya');
    
$russmall=Array('ё' ,'ж' ,'ч' ,'ш' ,'щ'  ,'ъ' ,'ы' ,'э' ,'ю' ,'я');
    
$text str_replace($russmall,$latsmall,$text);

    
$latbig=Array('YO','ZH','CH','SH','SCH','JJ','BI','YE','YU','YA');
    
$russbig=Array('Ё' ,'Ж' ,'Ч' ,'Ш' ,'Щ'  ,'Ъ' ,'Ы' ,'Э' ,'Ю' ,'Я');
    
$text str_replace($rusbig,$latbig,$text);

    
$simb1=Array('-','-' ,'-','' ,'' ,'' ,'' ,'' ,' ','' ,'' ,''  ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''  ,'' ,'' ,'' ,'');
    
$simb2=Array(' ','\n','    ','.',',','!','?',':',';','<','>','\'','"',')','(','*','%','$','#','\\','/','>','<','&');
    
$text str_replace($simb2,$simb1,$text);

    return 
$text;
}


function 
transliteRus($text){
    
$text=strtr($text,"abvgdeziyklmnoprstufhcj","абвгдезийклмнопрстуфхць");
    
$text=strtr($text,"ABVGDEZIYKLMNOPRSTUFHCJ","АБВГДЕЗИЙКЛМНОПРСТУФХЦЬ");

    
$latsmall=Array('jo','zh','ch','sh','scH','jj','bi','ye','yu','ya');
    
$russmall=Array('ё' ,'ж' ,'ч' ,'ш' ,'щ'  ,'ъ' ,'ы' ,'э' ,'ю' ,'я');
    
$text str_replace($latsmall,$russmall,$text);

    
$latbig=Array('YO','ZH','CH','SH','SCH','JJ','BI','YE','YU','YA');
    
$russbig=Array('Ё' ,'Ж' ,'Ч' ,'Ш' ,'Щ'  ,'Ъ' ,'Ы' ,'Э' ,'Ю' ,'Я');
    
$text str_replace($latbig,$rusbig,$text);

    
$simb1=Array('-','-' ,'-');
    
$simb2=Array(' ','\n','    ');
    
$text str_replace($simb1,$simb2,$text);

    return 
$text;
}

Спустя 48 минут, 40 секунд (22.10.2009 - 12:11) twin написал(а):
Два основных недочета.
1. Функция не будет работать под utf-8
2. Транслит не по ГОСТу
И с символами я не понял танец... Зачем это?

А сам проверял результат?
Вот твой спич в латинице
Цитата
Эkspertbi-Vbi-inogda-otpisbivaetesj-tak-chto-ya-v-stopor-vhozhu-Я-zhe-ne-profi-v-PHP-ya-toljko-uchusj-escHe-Poyetomu-v-yetoy-vetke-i-zadayu-voprosbi Vot-chto-ya-sam-napisal-posmotrite-i-esli-estj-oshibki-ukazhite-na-nih-a-luchjshe-srazu-ispravlennbiy-variant

И обратное преобразование
Цитата
Экспертби Вби иногда отписбиваетесь так цхто йа в стопор вхозху Я зхе не профи в ПХП йа только уцхусь есцХе Пойетому в йетой ветке и задайу вопросби Вот цхто йа сам написал посмотрите и если есть осхибки указхите на них а луцхьсхе сразу исправленнбий вариант

Я вобщем то не понимаю, зачем это нужно, но алгоритм обратных преобразований мне представляется крайне сложным, на грани возможного.


Спустя 2 минуты, 15 секунд (22.10.2009 - 12:13) Nikitian написал(а):
http://ru.wikipedia.org/wiki/%D0%93%D0%9E%...D0%A2_7.79-2000

Например ISO9 подразумевает обратимую транслитерацию. Всё просто: символы, используемые в буквосочетаниях не используются отдельно (хотя бы один из символов).
Маленькая подсказка: при обратной транслитерации в первую очередь заменять буквосочетания в порядке убывания их длины, а уже потом односимвольные.

Спустя 9 минут, 20 секунд (22.10.2009 - 12:23) HIDDENSY написал(а):
Цитата (twin @ 22.10.2009 - 09:11)
Два основных недочета.
1. Функция не будет работать под utf-8
2. Транслит не по ГОСТу
И с символами я не понял танец... Зачем это?

Я вобщем то не понимаю, зачем это нужно, но алгоритм обратных преобразований мне представляется крайне сложным, на грани возможного.

Танцы с бубнами в шаманской шапке невидимки мне нужны для решения вопроса освещенного в ветке http://phpforum.ru/index.php?showtopic=21903

т.к. класс выложенный там работать нормально не хочет, точнее при подключении библиотеки отключается поиск, связка в кодировках там проблемная, пришлось get запрос конвертить в транслит, а потом обратно, в такой связке работает все, но опять затык с этим транслитом.

Куда не глядь одни проблемы.

Спустя 2 минуты, 8 секунд (22.10.2009 - 12:25) Nikitian написал(а):
Цитата (HIDDENSY @ 22.10.2009 - 09:23)
пришлось get запрос конвертить в транслит, а потом обратно...


Куда не глядь одни проблемы.

А про функции urlencode()-urldecode() слышали?

Спустя 2 минуты, 29 секунд (22.10.2009 - 12:27) twin написал(а):
Да ты сдурел biggrin.gif
Кто же вырезает гланды через задницу то... Приведи кодировки в порядок просто. А урл кодировать надо urldecode() и раскодировать urlencode()

Спустя 3 минуты, 24 секунды (22.10.2009 - 12:31) HIDDENSY написал(а):
Цитата (twin @ 22.10.2009 - 09:27)
Да ты сдурел biggrin.gif
Кто же вырезает гланды через задницу то... Приведи кодировки в порядок просто. А урл кодировать надо urldecode() и раскодировать urlencode()

Я уже все что мог с кодировками перепробовал не работает.

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

Спустя 14 минут, 15 секунд (22.10.2009 - 12:45) twin написал(а):
Видел надпись на стенке в туалете - "ничего хорошего из тебя не выйдет".
Пока ты маешься дурью с кодировкой windows-1251 ничего хорошего из скрипта не выйдет. Это все полумеры и кривокосость. Перекодируй сайт и будет щастья.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.