проблемы с функцией транслита

Ilya

Новичок
проблемы с функцией транслита

привет!
написал функцию для перевода кирилических строк в транслит.
функция при переводе теряет некоторые символы


PHP:
  function toTranslit( $string ) {

           $translit = array();
           $translit['a'] = "а";
           $translit['b'] = "б";
           $translit['v'] = "в";
     .....
           $translit['ts'] = "ц";
           $translit['sh'] = "щ";
           $translit['sh'] = "ш";
           $translit['i'] = "ы";
           $translit['e'] = "э";
           $translit['u'] = "ю";
           $translit['ya'] = "я";


           $result = "";

           $string = str_replace( " ", "_", $string );
           $string = strtolower( $string );
           echo $string . "<br>";
           for( $i = 0; $i < strlen( $string ); $i++ ) {
                $letter = $string[$i];

                if( $letter == "_" ) $result .= "_";

                foreach( $translit as $key => $value ) {
                         if( $letter == $value ) $result .= $key;
                }

           }
           return $result;

  }
  echo toTranslit( "тщеславный упырь расселся в центре нашего города и чувствует себя лучше всех, пока моя собака бегает рядом" );
выводит:
tеslavni_pir_rassеlsya_v_tsеntrе_nashеo_oroda__chvstvеt_sеbya_lchshе_vsеh_poka_moya_sobaka_bеaеt_ryadom


в чем может быть дело?! подскажите плз!
 

kvf77

Red Devil
Ilya

мил друг, ты ваще чего?
во-первых, почему не сделать массив так:

$translin['ц'] = 'ts';

тогда тебе не нужен будет этот убогий цикл, а взять значение можно будет сразу

$result .= $translin[$letter];

во-вторых, сдается мне, что у тебя просто отсутствуют эти буквы в массиве $translit

кстати, str_replace умеет реплейсить принимая в качестве аргументов массивы...
 

Ilya

Новичок
kvf77, со мной все нормально :)

ниразу не использовал русские индексы в массивах. не знал об этом, теперь буду знать! спасибо, в таком случае ситуация облегчается совсем, strtr() и все!

p.s. буквы то у меня все были естессно :)
 

kvf77

Red Devil
Ilya

индекс - это строка - какая ему разница что ты там напишешь
 

Ilya

Новичок
спасибо за помощь!

-~{}~ 25.12.05 18:55:

странно!
товарищи, проблема не пропала.
на входе: Дизайнер Алексей Ушаков Куриная лапка
на выходе: izainer_leksei_shakov_urinaya_lapka

т.е. некоторые символы по неизвестной мне причине пропадают.

функиця:

PHP:
  function toTranslit( $string ) {

           $translit = array();
           $translit['а'] = "a";
           $translit['б'] = "b";
           $translit['в'] = "v";

// все буквы в массиве присутствуют

           $translit['щ'] = "sh";
           $translit['ш'] = "sh";
           $translit['ы'] = "i";
           $translit['э'] = "e";
           $translit['ю'] = "u";
           $translit['я'] = "ya";
           $translit['ъ'] = "";
           $translit['ь'] = "";


           $result = "";
           $string = str_replace( " ", "_", $string );
           $string = strtolower( $string );
           $result = strtr( $string, $translit );

           return $result;

  }
подскажите плз!

-~{}~ 25.12.05 19:05:

тема закрыта, нашел где собака зарылась.

strtolower & set_locale
 
Сверху