Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: с русского на латинский. перевод символов
 
 автор: SDL   (09.12.2008 в 02:53)   письмо автору
 
 

дан текст, который может сождержать символы, русский и английский алфавит. как перевести в текст, где все англиские буквы остаются на месте, русские заменяются эквивалентами английских (например р-r, д-d, и т.п.), а остальные символы - символом подчеркивания?

у меня есть простой вариант - это

$string = "tra-ta-ta русские слова and english worlds and any symbols #@*())";
$replace = array("а" => "a", "б" => "b", ....);
echo strtr($string,$replace);

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

  Ответить  
 
 автор: Pon4ik   (09.12.2008 в 13:22)   письмо автору
 
   для: SDL   (09.12.2008 в 02:53)
 

<?php

// Транслитерация строк

function transliterate($st) {
  
$st strtr($st,
    
"абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
    
"abvgdegziyklmnoprstufieABVGDEGZIYKL MNOPRSTUFIE"
  
);
  
$st strtr($st, array(
    
'ё'=>"yo",    'х'=>"h",  'ц'=>"ts",  'ч'=>"ch"'ш'=>"sh",
    
'щ'=>"shch",  'ъ'=>'',   'ь'=>'',    'ю'=>"yu"'я'=>"ya",
    
'Ё'=>"Yo",    'Х'=>"H",  'Ц'=>"Ts",  'Ч'=>"Ch"'Ш'=>"Sh",
    
'Щ'=>"Shch",  'Ъ'=>'',   'Ь'=>'',    'Ю'=>"Yu"'Я'=>"Ya",
  ));
  return 
$st;
}
echo 
transliterate("tra-ta-ta русские слова and english worlds and any symbols #@*())");
?>


Выведет: tra-ta-ta russkie slova and english worlds and any symbols #@*())

  Ответить  
 
 автор: SDL   (09.12.2008 в 21:09)   письмо автору
 
   для: Pon4ik   (09.12.2008 в 13:22)
 

я так и сделал. только добавил еще замену небуквенных символов (кроме цифр) на символ подчеркивания

function translation($string)
{
    $replace = array("Ю" => "a","А" => "b",
"Б" => "v","Ц" => "g","Д" => "d","Е" => "e","T" => "e",
"Ф" => "j","Г" => "z","Х" => "i","И" => "i","Й" => "k",
"К" => "l","Л" => "m","М" => "n","Н" => "o","О" => "p",
"П" => "r","Я" => "s","Р" => "t","С" => "u","Т" => "f",
"У" => "h","Ж" => "c","В" => "ch","Ь" => "sh",
"Ы" => "sch","З" => "_","Ш" => "y","Э" => "_",
"Щ" => "e","Ч" => "yu","Ъ" => "ya");
    $string = strtr($string,$replace);
    return preg_replace('/[^a-zA-ZЮ-Ъю-ъ0-9]{1}/','_',$string);
}
echo translation("русские символы и endglish words and any symbols !@#$%^&*()_+");

  Ответить  
 
 автор: SDL   (09.12.2008 в 21:15)   письмо автору
 
   для: SDL   (09.12.2008 в 21:09)
 

cheops, гляньте что с дизайном...
хотя у меня пробелы стоят перед и после стрелок =>

кстати, только сейчс заметил - массив не правильно отображается (скопировал с Бреда, кодировка koi8).

  Ответить  
 
 автор: ddhvvn   (09.12.2008 в 21:17)   письмо автору
 
   для: SDL   (09.12.2008 в 02:53)
 

http://www.softtime.ru/scripts/translit.php

  Ответить  
 
 автор: SDL   (09.12.2008 в 21:20)   письмо автору
 
   для: ddhvvn   (09.12.2008 в 21:17)
 

ок

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования