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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Транслитерация. Есть ли функция транслитерации в php? 
:(
    Опции темы
Guest
Дата 23.11.2005, 13:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте.
В perl есть операция транслитерации: $string=~tr/абвгд/abvgd/ (элементы из левого списка если встречаются в строке, заменяются элементами из соответствующих позиций правого списка). Есть ли в библиотеке регулярных выражений php функция-аналог этой операции perl?
Заранее, спасибо.

  Вверх
2man
Дата 23.11.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2007
Регистрация: 6.5.2005
Где: Нижние Чигири

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



Быть может эта тема тебе поможет
http://forum.vingrad.ru/index.php?showtopic=70271


--------------------
Быстро поднятое - упавшим не считаеся
PM MAIL ICQ MSN   Вверх
Guest
Дата 23.11.2005, 14:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну собственно, в php можно и проще, через preg_replace. Вот что у меня есть сейчас:

Код

<php?
function Windows1251_2_Translit($String){
         $String=preg_replace('/А/','A',$String);
         $String=preg_replace('/а/','a',$String);
         $String=preg_replace('/Б/','B',$String);
         $String=preg_replace('/б/','b',$String);
         $String=preg_replace('/В/','V',$String);
         $String=preg_replace('/в/','v',$String);
         $String=preg_replace('/Г/','G',$String);
         $String=preg_replace('/г/','g',$String);
         $String=preg_replace('/Д/','D',$String);
         $String=preg_replace('/д/','d',$String);
         $String=preg_replace('/Е/','E',$String);
         $String=preg_replace('/е/','e',$String);
         $String=preg_replace('/Ё/','YO',$String);
         $String=preg_replace('/ё/','yo',$String);
         $String=preg_replace('/Ж/','ZH',$String);
         $String=preg_replace('/ж/','zh',$String);
         $String=preg_replace('/З/','z',$String);
         $String=preg_replace('/з/','z',$String);
         $String=preg_replace('/И/','I',$String);
         $String=preg_replace('/и/','i',$String);
         $String=preg_replace('/Й/','J',$String);
         $String=preg_replace('/й/','j',$String);
         $String=preg_replace('/К/','K',$String);
         $String=preg_replace('/к/','k',$String);
         $String=preg_replace('/Л/','L',$String);
         $String=preg_replace('/л/','l',$String);
         $String=preg_replace('/М/','M',$String);
         $String=preg_replace('/м/','m',$String);
         $String=preg_replace('/Н/','N',$String);
         $String=preg_replace('/н/','n',$String);
         $String=preg_replace('/О/','O',$String);
         $String=preg_replace('/о/','o',$String);
         $String=preg_replace('/П/','P',$String);
         $String=preg_replace('/п/','p',$String);
         $String=preg_replace('/Р/','R',$String);
         $String=preg_replace('/р/','r',$String);
         $String=preg_replace('/С/','S',$String);
         $String=preg_replace('/с/','s',$String);
         $String=preg_replace('/Т/','T',$String);
         $String=preg_replace('/т/','t',$String);
         $String=preg_replace('/У/','U',$String);
         $String=preg_replace('/у/','u',$String);
         $String=preg_replace('/Ф/','F',$String);
         $String=preg_replace('/ф/','f',$String);
         $String=preg_replace('/Х/','X',$String);
         $String=preg_replace('/х/','x',$String);
         $String=preg_replace('/Ц/','CZ',$String);
         $String=preg_replace('/ц/','cz',$String);
         $String=preg_replace('/Ч/','CH',$String);
         $String=preg_replace('/ч/','ch',$String);
         $String=preg_replace('/Ш/','SH',$String);
         $String=preg_replace('/ш/','sh',$String);
         $String=preg_replace('/Щ/','SHH',$String);
         $String=preg_replace('/щ/','shh',$String);
         $String=preg_replace('/Ъ/','"',$String);
         $String=preg_replace('/ъ/','"',$String);
         $String=preg_replace('/Ы/',"Y'",$String);
         $String=preg_replace('/ы/',"y'",$String);
         $String=preg_replace('/Ь/',"'",$String);
         $String=preg_replace('/ь/',"'",$String);
         $String=preg_replace('/Э/',"E'",$String);
         $String=preg_replace('/э/',"e'",$String);
         $String=preg_replace('/Ю/','YU',$String);
         $String=preg_replace('/ю/','yu',$String);
         $String=preg_replace('/Я/','YA',$String);
         $String=preg_replace('/я/','ya',$String);
         return $String;}
?>


Но очень хочется сделать покороче.
  Вверх
R.M.
Дата 23.11.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


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

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



Можно ещё проще
Код

$rus=array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я',' ','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я');
$eng=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',"'",'i',"'",'e','yu','ya','_','A','B','V','G','D','E','Yo','J','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sch',"'",'I',"'",'E','Yu','Ya');
$translate = str_replace($rus,$eng,$foldername);



--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
Bikutoru
Дата 23.11.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

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



ИМХО, удобнее всего транслитерацию организовать с помощью функции strtr
http://ru.php.net/manual/en/function.strtr.php


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 23.11.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Bikutoru реально, вариант с str_replace проще... Меньше памяти кушать по логике будет, да и массив более понятный.
PM ICQ   Вверх
Bikutoru
Дата 23.11.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

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





Цитата(Mal @ 23.11.2005, 19:51)
вариант с str_replace проще

Если основываться на примере автора темы,
Цитата(Guest @ 23.11.2005, 14:20)
$string=~tr/абвгд/abvgd/

то
Код

strtr($string, 'абвгд', 'abvgd')

попроще чем
Код

str_replace(array('а', 'б', 'в', 'г', 'д'), array ('a', 'b', 'v', 'g', 'd'), $string)

Но если транслитерировать весь алфавит, то с str_replace попроще но не намного.

А вот насчёт памяти не согласен. strtr потребует только один массив против двух у str_replace
Код

$rusToEn= array (
'a' => 'a',
'б' => 'b',
//...
'ч' => 'ch',
//...
);

strtr($string, $rusToEn);


Добавлено @ 19:10
Вообще-то разницы особой нет - всё на любителя


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 23.11.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Bikutoru @ 23.11.2005, 19:08)
Вообще-то разницы особой нет - всё на любителя

На этом и сойдемся smile
PM ICQ   Вверх
Guest
Дата 24.11.2005, 08:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 Bikutoru
В точку! Strtr - полная аналогия tr///, как раз то, что я искал. Видимо, плохо искал.
2 all
Ёщё раз, спасибо за помощь!

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


 




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


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

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