Перейти к контенту

ПХП скриптик похожий на транслитератор


Рекомендуемые сообщения

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

 

Суть скрипта в том, что человек вводит в форму маленький код окло 10 символов состоящий из русских букв и символов. Потом он берёт, нажимает на кнопку и его выдаёться этот код в транслитерированом варианте - тоесть русские буквы заменяются на альтернативные им, но по своим правилам, а не по правилам транслитерации, хотя они похожи. В принцыпе в скрипте всё и так понятно, если посмотреть его код. Сразу видно что там есть много глупойстей в техническом оформлении но вот как их исправить я не знаю.

На вот скрипт: http://mrmad-cat.kiev.ua/BGE/bge_code_transliterator.php

 

А вот его код на данный момент:

<?php
function replace_rus_eng($txt="")
{$txt = preg_replace( "#\ А #"     , " A " , $txt );
$txt = preg_replace( "#\ Б #"     , " B " , $txt );
$txt = preg_replace( "#\ Ц #"     , " C " , $txt );
$txt = preg_replace( "#\ Д #"     , " D " , $txt );
$txt = preg_replace( "#\ Е #"     , " E " , $txt );
$txt = preg_replace( "#\ Ф #"     , " F " , $txt );
$txt = preg_replace( "#\ Г #"     , " G " , $txt );
$txt = preg_replace( "#\ Ю #"     , " H " , $txt );
$txt = preg_replace( "#\ И #"     , " I " , $txt );
$txt = preg_replace( "#\ Й #"     , " J " , $txt );
$txt = preg_replace( "#\ К #"     , " K " , $txt );
$txt = preg_replace( "#\ Л #"     , " L " , $txt );
$txt = preg_replace( "#\ М #"     , " M " , $txt );
$txt = preg_replace( "#\ Н #"     , " N " , $txt );
$txt = preg_replace( "#\ О #"     , " O " , $txt );
$txt = preg_replace( "#\ П #"     , " P " , $txt );
$txt = preg_replace( "#\ Я #"     , " Q " , $txt );
$txt = preg_replace( "#\ Р #"     , " R " , $txt );
$txt = preg_replace( "#\ С #"     , " S " , $txt );
$txt = preg_replace( "#\ Т #"     , " T " , $txt );
$txt = preg_replace( "#\ У #"     , " U " , $txt );
$txt = preg_replace( "#\ В #"     , " V " , $txt );
$txt = preg_replace( "#\ Ш #"     , " W " , $txt );
$txt = preg_replace( "#\ Х #"     , " X " , $txt );
$txt = preg_replace( "#\ Ч #"     , " Y " , $txt );
$txt = preg_replace( "#\ Ж #"     , " Z " , $txt );
$code= $txt""
};
<center><form action="function replace_rus_eng" method="post">
<input name="kod" type="text">
<br><button type="submit" onMouseOver="style.color='Green'" onMouseOut="style.color='black'"><b>Перекласти RUS->ENG</b></button>
</form></center>

if ($txt=="*Ю*" or $txt=="*ю*" or $txt=="*И*" or $txt=="*и*" or $txt=="*Ч*" or $txt=="*ч*" or $txt=="*Й*" or $txt=="*й*")
{echo ("
У вашому коді є букви Я, И, Й або Ч. На жаль. коди з ним перекладаються не завжди правильно. Якщо код не підійде, спробуйте зробити новий сейв, щоб отримати інший код без цих символів.
Ваш код:
['code']
");}

elseif ($txt=="*/*")
{echo ("
У вашому коді є символ /. На жаль, коди з ним перекладаються не завжди правильно. Якщо код не підійде, спробуйте зробити новий сейв, щоб отримати інший код без цих символів.
Ваш код:
['code']
");}

else
{ echo("
Ваш код:
['code']
");}
?>

Ссылка на комментарий
Поделиться на других сайтах

Жесть. :D

$code= $txt""

Нда. Ошибка. и про html оформление забыли...

 

В form action нельзя писать имя php функции, можно только ehk файла. при это м то что было в окошке станет доступно по переменной $kod.

 

Не знаю, как насчёт украинских букв, не понял в чём идея, но по мне лучше и главное должен работать такой вариант:

<?php
if(!isset($code))
{
$code = '';
}
else//добавил
{
$code = replace_rus_eng($code);
}//добавил

function replace_rus_eng($txt)
{
$txt = preg_replace( "#\ А #"	 , " A " , $txt );
$txt = preg_replace( "#\ Б #"	 , " B " , $txt );
$txt = preg_replace( "#\ Ц #"	 , " C " , $txt );
$txt = preg_replace( "#\ Д #"	 , " D " , $txt );
$txt = preg_replace( "#\ Е #"	 , " E " , $txt );
$txt = preg_replace( "#\ Ф #"	 , " F " , $txt );
$txt = preg_replace( "#\ Г #"	 , " G " , $txt );
$txt = preg_replace( "#\ Ю #"	 , " H " , $txt );
$txt = preg_replace( "#\ И #"	 , " I " , $txt );
$txt = preg_replace( "#\ Й #"	 , " J " , $txt );
$txt = preg_replace( "#\ К #"	 , " K " , $txt );
$txt = preg_replace( "#\ Л #"	 , " L " , $txt );
$txt = preg_replace( "#\ М #"	 , " M " , $txt );
$txt = preg_replace( "#\ Н #"	 , " N " , $txt );
$txt = preg_replace( "#\ О #"	 , " O " , $txt );
$txt = preg_replace( "#\ П #"	 , " P " , $txt );
$txt = preg_replace( "#\ Я #"	 , " Q " , $txt );
$txt = preg_replace( "#\ Р #"	 , " R " , $txt );
$txt = preg_replace( "#\ С #"	 , " S " , $txt );
$txt = preg_replace( "#\ Т #"	 , " T " , $txt );
$txt = preg_replace( "#\ У #"	 , " U " , $txt );
$txt = preg_replace( "#\ В #"	 , " V " , $txt );
$txt = preg_replace( "#\ Ш #"	 , " W " , $txt );
$txt = preg_replace( "#\ Х #"	 , " X " , $txt );
$txt = preg_replace( "#\ Ч #"	 , " Y " , $txt );
$txt = preg_replace( "#\ Ж #"	 , " Z " , $txt );
return $txt;
};
?>
<html>
<head>
<title>Перекласти RUS->ENG</title>
</head>
<body>
<center><form action="<?php print $PHP_SELF; ?>" method="POST">
<input name="code" type="text">
<br><button type="submit" onMouseOver="style.color='Green'" onMouseOut="style.color='black'"><b>Перекласти RUS->ENG</b></button>
</form></center>
<?php
if($code != '')
{
print "<br />Ваш код: ".$code;
}
?>
</body>
</html>

Изменено пользователем Sannis
Ссылка на комментарий
Поделиться на других сайтах

Хм.. спасибо. Только не работает. Тоесть код выводит но нету замены. Тоесть просто дублирует. Может я что-то в замене неправильно оформил?

 

А насчёт укр букв то там ничего такого небыло. Там просто суть в том, что мне надо если в этом коде встречаеться буква Ю, И, Й, Ч или их маленькие варианты, или же "/", должна выводиться дополнительная надпись, что данные буквы перевести нельзя на 100% правильно. Я это сделал вот так, но тут явно тоже много неправильно:

 

if ($txt=="*Ю*" or $txt=="*ю*" or $txt=="*И*" or $txt=="*и*" or $txt=="*Ч*" or $txt=="*ч*" or $txt=="*Й*" or $txt=="*й*")
{echo ("
У вашому коді є букви Я, И, Й або Ч. На жаль. коди з ним перекладаються не завжди правильно. Якщо код не підійде, спробуйте зробити новий сейв, щоб отримати інший код без цих символів.
Ваш код:['code']
");}
elseif ($txt=="*/*")
{echo ("
У вашому коді є символ /. На жаль, коди з ним перекладаються не завжди правильно. Якщо код не підійде, спробуйте зробити новий сейв, щоб отримати інший код без цих символів.
Ваш код:['code']
");}
else{ 
echo("
Ваш код:['code']
");}

 

Я наверно не очень правельно это сделал, то теоретически видно что я хочу сделать. * я поставил как в виндовсе поиск. Тоесть * - любое количество любых символов. Соответственно elseif ($txt=="*/*") я имел ввиду что в коде нашолся символ "/" и надо действовать по определённому сценарию.

Ссылка на комментарий
Поделиться на других сайтах

Да, ошибся, исправил начало.

 

Я наверно не очень правельно это сделал, то теоретически видно что я хочу сделать. * я поставил как в виндовсе поиск. Тоесть * - любое количество любых символов. Соответственно elseif ($txt=="*/*") я имел ввиду что в коде нашолся символ "/" и надо действовать по определённому сценарию.

 

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

Ссылка на комментарий
Поделиться на других сайтах

О, спасибо, мне кажется что это оно.

А соеденить это с вот этим:

<?php
if($code != '')
{
print "<br />Ваш код: ".$code;
}
?>

будет так?:

<?php
if (preg_match("/(ю|й|и|ч|\/)/i", $txt))
{
echo '<br>Есть плохие символы :)';
}

else
{
echo '<br>Нет плохих символов. :) Ваш код: '.$code;
}
?>

Не работает, выводит только последний вариант...

 

И всётаки почему сам скрипт не работает? Всмысле сама замена.

Ссылка на комментарий
Поделиться на других сайтах

Потому что сама замена неправильно написана. :D

Указанный мной код всего лишь ищет соответствия в $txt в независимости от регистра и в случае нахождения выводит соответствующий текст.

Изменено пользователем sM1Le
Ссылка на комментарий
Поделиться на других сайтах

Честно говоря не помню чтобы в регулярках # чтото значило, так что вот мой вариант со str_replace:

<?php
if(!isset($code))
{
   $answer = '<br />Вы не ввели код.';
   $code = '';
}
else if(preg_match("/(ю|й|и|ч|\/)/i", $code))
{
   $answer = '<br />Вы ввели недопустимые символы.';
}
else
{
   $answer = '<br />Нет плохих символов.  Ваш код:'.replace_rus_eng($code);
}

function replace_rus_eng($txt)
{
   $txt = str_replace("А"    ,"A", $txt );
   $txt = str_replace("Б"    ,"B", $txt );
   $txt = str_replace("Ц"    ,"C", $txt );
   $txt = str_replace("Д"    ,"D", $txt );
   $txt = str_replace("Е"    ,"E", $txt );
   $txt = str_replace("Ф"    ,"F", $txt );
   $txt = str_replace("Г"    ,"G", $txt );
   $txt = str_replace("Ю"    ,"H", $txt );
   $txt = str_replace("И"    ,"I", $txt );
   $txt = str_replace("Й"    ,"J", $txt );
   $txt = str_replace("К"    ,"K", $txt );
   $txt = str_replace("Л"    ,"L", $txt );
   $txt = str_replace("М"    ,"M", $txt );
   $txt = str_replace("Н"    ,"N", $txt );
   $txt = str_replace("О"    ,"O", $txt );
   $txt = str_replace("П"    ,"P", $txt );
   $txt = str_replace("Я"    ,"Q", $txt );
   $txt = str_replace("Р"    ,"R", $txt );
   $txt = str_replace("С"    ,"S", $txt );
   $txt = str_replace("Т"    ,"T", $txt );
   $txt = str_replace("У"    ,"U", $txt );
   $txt = str_replace("В"    ,"V", $txt );
   $txt = str_replace("Ш"    ,"W", $txt );
   $txt = str_replace("Х"    ,"X", $txt );
   $txt = str_replace("Ч"    ,"Y", $txt );
   $txt = str_replace("Ж"    ,"Z", $txt );
   return $txt;
};
?>
<html>
<head>
  <title>Перекласти RUS->ENG</title>
</head>
<body>
   <center><form action="<?php print $PHP_SELF; ?>"method="POST">
   <input name="code"type="text"value="<?php print $code; ?>">
   <br><button type="submit"onMouseOver="style.color='Green'"onMouseOut="style.color='black'"><b>Перекласти RUS->ENG</b></button>
   </form></center>
<?php
   print $answer;
?>
</body>
</html>

У меня работает.

Изменено пользователем Sannis
Ссылка на комментарий
Поделиться на других сайтах

Большое спасибо. Единственное исправление elseif пишеться вмести, и неправильные символы надо писать во всех регистрах так как к примеру большя буква Ю проходит спокойно...

 

И кстати тоже самое с заменой. Надо вводить и большой и маленький вариант.

Ссылка на комментарий
Поделиться на других сайтах

жесть :D

 

а что, в одним (прег|стр)_реплейс'ом уже никто не умеет обходиться?

 

function ToTranslit($value) {
$convf = array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
	"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я");
$convt = array("A", "B", "V", "G", "D", "E", "Jo", "Zh", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "Ch", "Sh", "W", "", "Y", "", "Je", "Ju", "Ja",
	"a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "w", "", "y", "", "je", "ju", "ja");
return str_replace($convf, $convt, $value);
}

;)

Ссылка на комментарий
Поделиться на других сайтах

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

 

Есть только 2 проблемы покачто:

Символ \ после нажатия на кнопку копируеться и становиться \\. Потом \\\\... и так далее в геометрической прогресии.

Символ < прекращает код. Тоесть все буквы после него не отображаються.

 

Может есть идеи у кого как это поправить?

 

Прикол с \ замечен так же и с символом ". получается это типа пхп делает автоматом замену спецсимволам.

 

А вообще зацените, прикольно получилось: http://mrmad-cat.kiev.ua/BGE/bge_code_transliterator.php

Ссылка на комментарий
Поделиться на других сайтах

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

не знаю правильно ли я понял общий смысл темы, так как читать влом было полностью, но!

 

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

 

короче это по ходу тоже что и ваше, тока наоборот

http://lyceum.mybrest.net/translit/

Ссылка на комментарий
Поделиться на других сайтах

А можно сделать так чтобы строка ввода была одна а кнопки 2 с разными значениями?
Ссылка на комментарий
Поделиться на других сайтах

Не знаю как насчёт кнопок(стандартных), но можно сделать <a href="xxx">рисунок или текст</a> ну и разные hrefы для двук кнопок. Собственно как это делается в ИПБ например.

 

Не знаю как насчёт кнопок(стандартных), но можно сделать <a href="xxx">рисунок или текст</a> ну и разные hrefы для двук кнопок.

Ссылка на комментарий
Поделиться на других сайтах

Это смотря что автору нужно) Полистай форум - поймёшь что в php я разбираюсь.

 

mrMad-Cat: В дополнение к моему посту:

Если разные фалы для обработки ввода, то в xxx пишем их названия/урлы/можно относительные, если нужно сделать обработку в одном файле, но скажем разными процедурами, то пишем

<a href="имя.php?a=1"> и <a href="имя.php?a=2">

если в том же файле что и форма, то

<?php print $PHP_SELF."?a=1"?> и <?php print $PHP_SELF."?a=1"?>

 

Собственно напиши что нужно то тебе, я напишу как реализовать.

Ссылка на комментарий
Поделиться на других сайтах

Нужно в одном и том же файле.

А вот код на данный момент:

<?php
if(!isset($code_rus_eng))
{
$answer_rus_eng = "<br>Enter your code and press the button.";
$code_rus_eng = "";
}
elseif(preg_match("/(ю|Ю|й|Й|и|И|ч|Ч|\/)/i", $code_rus_eng))
{
$answer_rus_eng = "
<br><font color=#FF0000>Вероятность правильного перевода символов \"Ю\", \"Й\", \"И\", \"Ч\", \"/\" равна 1 к 4. По-этому, если ваш код не срабатывает, - сделайте новое сохранение чтобы получить новый код</font>.
<br>Your code: <font style='filter:glow(Strength=5,Color=Green);height:15;color:Black'>".replace_rus_eng($code_rus_eng)."</font>";
}
else
{
$answer_rus_eng = "<br>Your code: <font style='filter:glow(Strength=5,Color=Green);height:15;color:Black'>".replace_rus_eng($code_rus_eng)."</font>";
}
function replace_rus_eng($txt)
{
$rus = array("А", "Б", "Ц", "Д", "Е", "Ф", "Г", "Ю", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Я", "Р", "С", "Т", "У", "В", "Ш", "Х", "Ч", "Ж", "а", "б", "ц", "д", "е", "ф", "г", "ю", "и", "й", "к", "л", "м", "н", "о", "п", "я", "р", "с", "т", "у", "в", "ш", "х", "ч", "ж");
$eng = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
return str_replace($rus, $eng, $txt);
};



if(!isset($code_eng_rus))
{
$answer_eng_rus = "";
$code_eng_rus = "";
}
else
{
$answer_eng_rus = "<br>Your code: <font style='filter:glow(Strength=5,Color=Green);height:15;color:Black'>".replace_eng_rus($code_eng_rus)."</font>";
}
function replace_eng_rus($txt)
{
$eng = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
$rus = array("А", "Б", "Ц", "Д", "Е", "Ф", "Г", "Ю", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Я", "Р", "С", "Т", "У", "В", "Ш", "Х", "Ч", "Ж", "А", "Б", "Ц", "Д", "Е", "Ф", "Г", "Ю", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Я", "Р", "С", "Т", "У", "В", "Ш", "Х", "Ч", "Ж");
return str_replace($eng, $rus, $txt);
};
?>
<html>
<head>
  <title>Internet-code ransliterator for the "Beyond Good & Evil"</title>
</head>
<body bgcolor="Black" background="/img/bg_stars.gif">
<table height=100% width=100% style="font-size:12pt;font-family:Comic Sans MS;color:Green" border=0>
<tr height=30% width=100%>
<td valign=middle align=center colspan="2">
<font style="font-size:28pt;filter:glow(Strength=5,Color=Green);height:15;font-family:Times New Roman;color:Black"><i>Internet-code ransliterator for the "Beyond Good & Evil"</i></font>
<br><a href="mailto:mrMad-Cat@i.ua" style="text-decoration:none;filter:glow(Strength=5,Color=Green);height:15;color=Black"><i> by mrMad-Cat</i></a>
</td>
</tr>
<tr height=40% width=100%>
<td width=50% valign=middle align=center>
<form action="<?php print $PHP_SELF; ?>"method="POST">
<input name="code_rus_eng" type="text" value="<?php print $code_rus_eng; ?>">
<br><button type="submit"onMouseOver="style.color='Green'"onMouseOut="style.color='black'"><b>Cyrillic to Latin</b></button>
</form>
<td width=50% valign=middle align=center>
<form action="<?php print $PHP_SELF; ?>"method="POST">
<input name="code_eng_rus" type="text" value="<?php print $code_eng_rus; ?>">
<br><button type="submit"onMouseOver="style.color='Green'"onMouseOut="style.color='black'"><b>Latin to Cyrillic</b></button>
</form>
</td>
</tr>
<tr height=40% width=100%>
<td width=100% valign="top" align=center colspan=2>
<?php
print $answer_rus_eng;
?>
<?php
print $answer_eng_rus;
?>
</td>
</tr>
</table>
<div align="right"><a href="mailto:mrMad-Cat@i.ua" style="text-decoration:none"><font color="Green" style="font-size:8pt">mrMad-Cat © 2006-2007</font></a></div>
</body>
</html>

 

И всётаки что делать с символами * и \

Да, ещё я заметил, что у меня глюки с кодировкой получились. Кодировка лечиться тегом мета?

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.