Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Транслит 
:(
    Опции темы
supercelt
Дата 3.6.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Код

function translit_en_to_ru($str)
{
$str=strtr($str, 'abvgdeegziiklmnoprstufhccssieuyABVGDEEGZIIKLMNOPRSTUGHCCSSIEUY', 'абвгдеёжзийклмнопрстуфхцчшщыэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ');
return $str;
}


Подставляются туда только буквы, причём только одна. Так вот, всё до G - нормально, а буква g (G) заменяется на Ф. И такая же херь ещё с некоторыми. В чём может быть ошибка?

Это сообщение отредактировал(а) supercelt - 3.6.2008, 11:27
PM   Вверх
krundetz
Дата 3.6.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Внимательнее смотрите на свои строки у вас как раз строке с английскими буквами повторяется несколько раз буква G а против неё стоят разные буквы в строке с русскими буквами. А вообще там алгоритм используется обычно другой.

Добавлено через 5 минут и 13 секунд
Код

<?php
function translite($text) {
$AZBUKA=array(
'a'=>'а',
'b'=>'б',
'v'=>'в',
'g'=>'г',
'd'=>'д',
'e'=>'е',
'yo'=>'ё',
'j'=>'ж',
'z'=>'з',
'i'=>'и',
'ji'=>'й',
'k'=>'к',
'l'=>'л',
'm'=>'м',
'n'=>'н',
'o'=>'о',
'p'=>'п',
'r'=>'р',
's'=>'с',
't'=>'т',
'y'=>'у',
'f'=>'ф',
'x'=>'х',
'c'=>'ц',
'ch'=>'ч',
'sh'=>'ш',
'csh'=>'щ',
'1'=>'ь',
'ui'=>'ы',
'2'=>'ъ',
'yii'=>'э',
'u'=>'ю',
'ya'=>'я'
);

/*$AZBUKA=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'=>'а'
); */

 $t = explode(" ",$text);

 foreach ($t as $key => $value) // перебор каждого слова
  { #1
   $length=strlen($value);
   //var_dump($length);
   $letter=Array();
   for ($i=0; $i<$length;$i++) // разделение слова на буквы
    {
     $letter[]=substr($value,$i,1);
    }
    //var_dump($letter);
     foreach ($letter as $k => $v) // перебор букв
      { #2
       $v_up = strtoupper($v);
       //var_dump($v_up);
       //var_dump($v);
       if (ereg("$v", "$v_up"))
        {$register="up";} else {$register="down";}
        //var_dump($register);
       foreach ($AZBUKA as $a => $b) // проход по азбуке
        { #3
         if (eregi("$b", "$v"))
          {
           if ($register == "up")
            {$letter[$k]=strtoupper($a);}
           if ($register == "down")
            {$letter[$k]=strtolower($a);}
          }
        } ##3
       $t[$key]=implode("",$letter);
      } ##2
   $text=implode("_",$t);
  } ##1
  return $text;

?>



--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
supercelt
Дата 3.6.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



ааа, ясно, спасибо

PM   Вверх
Feldmarschall
Дата 3.6.2008, 12:45 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



krundetz, это ты серьёзно?
PM   Вверх
bars80080
Дата 3.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



есть покороче вариант:
Код
function translit($slovo) {    
    $slovo=strtr($slovo,"абвгдеёзийклмнопрстуфхъыэ","abvgdeeziyklmnoprstufh'ie");
    $slovo=strtr($slovo,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ","ABVGDEEZIYKLMNOPRSTUFH'IE");
    $slovo=strtr($slovo,array(
    "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
    "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA"));
    return $slovo;
}


Добавлено через 1 минуту и 13 секунд
надо только перевернуть её в обратную сторону
PM MAIL WWW   Вверх
krundetz
Дата 3.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(Feldmarschall @ 3.6.2008,  12:45)
krundetz, это ты серьёзно?

Абсолютно. Вобщем то код там рабочий из какогото уже несуществующего проекта. Но выкладывал я его чтобы принцип понятен был. Как его оптимизировать показал bars80080.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 3.6.2008, 14:09 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



krundetz, у тебя там не принцип, а голотяпство с костылями.
Принцип показан уже у автора вопроса. Как его оптимизировать, показал Барс. А ты тут вообще не при чем
PM   Вверх
slaw
Дата 4.6.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.4.2008

Репутация: 1
Всего: 1



Feldmarschall, рабочий скрипт?.. рабочий... а то, что через ... сделан (так он сам признался, что не его творение... и это лишь пример)... к тому же у bars80080-а есть ошибка в функции (4 со 2 строкой местами поменять не мешало бы) 
PM MAIL WWW   Вверх
bars80080
Дата 4.6.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



почему? это же перевод с кирилицы на латиницу, там везде берётся один символ.
А вот в обратном направлении да, надо строку с многосимвольными сочетаниями поднять на первое место, ну и поменять местами значения в массивах
PM MAIL WWW   Вверх
supercelt
Дата 5.6.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Всё проще. В общем смысл такой, что слово помещается в базу и просто нужно выделить первую букву слова, что бы тоже записать её в базу, для лёгкого отображения по алфавиту. Но иногда в русском варианте чел может написать англ. буквы, не по ошибке, а потому что само слово такое. Вот и надо строго заменить одну букву только на одну.  И вот проблема в том, что: г->g   и   ж->g. Так что функция strtr не подойдёт
PM   Вверх
Feldmarschall
Дата 5.6.2008, 12:48 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



supercelt, тебе искусственный интеллект, что ли нужен? чтобы скрипт сам определял, что Gena - это Жена, а не Гена? Это тебе не на этот форум тогда
PM   Вверх
supercelt
Дата 5.6.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Feldmarschall ,речь идёт не о словах а только об одной букве, с которой начинается слово
PM   Вверх
Feldmarschall
Дата 5.6.2008, 13:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



жесть.
если речь будет идти об одной букве, СМЫСЛ моего вопроса изменится?

PM   Вверх
bars80080
Дата 5.6.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



функция strtr нормально справляется со своими обязаностями
естесственно будут погрешности на переводе туда-обратно, но этого не избежать (кирилица и латиница - это не разные кодировки одного и того же)

Код

function translit_ru_en($slovo) {    
    $slovo=strtr($slovo,'абвгдеёзийклмнопрстуфхъыэ','abvgdeeziyklmnoprstufh\'ie');
    $slovo=strtr($slovo,'АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ','ABVGDEEZIYKLMNOPRSTUFH\'IE');
    $slovo=strtr($slovo,array(
    'ж'=>'zh', 'ц'=>'ts', 'ч'=>'ch', 'ш'=>'sh', 'щ'=>'shch','ь'=>'', 'ю'=>'yu', 'я'=>'ya',
    'Ж'=>'ZH', 'Ц'=>'TS', 'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHCH','Ь'=>'', 'Ю'=>'YU', 'Я'=>'YA'));
    return $slovo;
}
function translit_en_ru($slovo) {    
    $slovo=strtr($slovo,array(
    'shch'=>'щ', 'zh'=>'ж', 'ts'=>'ц', 'ch'=>'ч', 'sh'=>'ш', 'yu'=>'ю', 'ya'=>'я',
    'SHCH'=>'Щ', 'ZH'=>'Ж', 'TS'=>'Ц', 'CH'=>'Ч', 'SH'=>'Ш', 'YU'=>'Ю', 'YA'=>'Я'));
    $slovo=strtr($slovo,'abvgdeziyklmnoprstufh\'','абвгдезийклмнопрстуфхъ');
    $slovo=strtr($slovo,'ABVGDEZIYKLMNOPRSTUFH\'','АБВГДЕЗИЙКЛМНОПРСТУФХЪ');
    return $slovo;
}

$a = 'жена';
$b = translit_ru_en($a);
$c = translit_en_ru($b);
echo $b.'<br />'.$c.'<br />';

$a = 'щука';
$b = translit_ru_en($a);
$c = translit_en_ru($b);
echo $b.'<br />'.$c.'<br />';

$a = 'сивый';
$b = translit_ru_en($a);
$c = translit_en_ru($b);
echo $b.'<br />'.$c.'<br />';



если же тебе нужно записать одну букву в БД, то не понятно зачем идёт транслитерация, раз неизвестно когда нужно переводить, а когда не нужно

советую просто rawurlencode твоей букве и она везде будет выглядеть одинаково
PM MAIL WWW   Вверх
Feldmarschall
Дата 5.6.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



bars80080, ты вопрос читать не пробовал?
перед тем, как на него отвечать
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1245 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.