PDA

View Full Version : codice morse script php..ma


lucas72
16-12-2005, 21:35
Ciao
Tempo fa ho scaricato uno script che trasformava
le lettere inserite nel campo del modulo in
codice morse e viceversa.


<?php
$lettertomorse=array();
$lettertomorse["a"]=".-";
$lettertomorse["b"]="-...";
$lettertomorse["c"]="-.-.";
$lettertomorse["d"]="-..";
$lettertomorse["e"]=".";
$lettertomorse["f"]="..-.";
$lettertomorse["g"]="--.";
$lettertomorse["h"]="....";
$lettertomorse["i"]="..";
$lettertomorse["j"]=".---";
$lettertomorse["k"]=".-.";
$lettertomorse["l"]=".-..";
$lettertomorse["m"]="--";
$lettertomorse["n"]="-.";
$lettertomorse["o"]="---";
$lettertomorse["p"]=".--.";
$lettertomorse["q"]="--.-";
$lettertomorse["r"]=".-.";
$lettertomorse["s"]="...";
$lettertomorse["t"]="-";
$lettertomorse["u"]="..-";
$lettertomorse["v"]="...-";
$lettertomorse["w"]=".--";
$lettertomorse["x"]="-..-";
$lettertomorse["y"]="-.--";
$lettertomorse["z"]="--..";
$lettertomorse["1"]=".----";
$lettertomorse["2"]="..---";
$lettertomorse["3"]="...--";
$lettertomorse["4"]="....-";
$lettertomorse["5"]=".....";
$lettertomorse["6"]="-....";
$lettertomorse["7"]="--...";
$lettertomorse["8"]="---..";
$lettertomorse["9"]="----.";
$lettertomorse["0"]="-----";
$lettertomorse[" "]=" ";
$lettertomorse["."]=".-.-.-";
$lettertomorse[","]="--..--";
$lettertomorse["EOM"]=".-.-.";

$morsetoletter=array();
reset($lettertomorse);
while (list($letter,$code)=each($lettertomorse)) {
$morsetoletter[$code]=$letter;
}

function morse_encode($txt) {
global $lettertomorse;

$line="";
for ($i=0;$i<strlen($txt);$i++) {
$letter=substr($txt,$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line.=$lettertomorse[$letter]." ";
}
return $line;
}

function morse_decode($string) {
global $morsetoletter;

$line="";
$letters=array();
$letters=explode(" ",$string);
foreach ($letters as $letter) {
// ignore unknown characters
if ($letter=="") $line.=" ";
if ($morsetoletter[$letter]=="") continue;

$line.=$morsetoletter[$letter];
}
return $line;
}
?>

<h1>Morse transletter</h1>

<form method="post" action="<?php echo $PHP_SELF ?>">
Real life text: <input type="text" name="txt" value="<?php echo $txt?>" size=50>
<br>
Morse text: <input type="text" name="morse" value="<?php echo $morse?>" size=50>
<input type="submit" value="Convert">
<input type="reset">
<br>
<hr>

<?php

if ($morse!="") {
echo morse_decode($morse),"<br>\n";
}

if ($txt!="") {
echo morse_encode($txt),"<br>\n";
}

if ($txt!="") {
echo "<hr>\n<pre>";

$line1="";
$line2="";

for ($i=0;$i<strlen($txt);$i++) {
$letter=substr($txt,$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line1.=$lettertomorse[$letter]." ";
$line2.=$letter;
for ($j=0;$j<strlen($lettertomorse[$letter]);$j++)
$line2.=" ";
$size+=strlen($lettertomorse[$letter])+1;

if ($size>70) {
echo "$line1\n";
echo "$line2\n";
echo "\n";
$line1="";
$line2="";
$size=0;
}
}

echo "$line1\n";
echo "$line2\n";
echo "\n";
echo "\n</pre>\n";
}
?>



Poi ho aggiornato il php apache ecc ecc (easy php)
che porta di default register_global su off
e il codice di cui sopra non funziona più
Ho tentato di aggiornare il codice
inserendo i vari request
ma adesso addirittura non visualizzo più niente
Non riesco a capire dove è l'errore.
E' da un po di tempo che non metto mani su codice
php e html (mi sto dedicando alla grafica :-))
Potete aiutarmi, per piacere?
Questo è il codice da me modificato:


<?php
$lettertomorse=array();
$lettertomorse["a"]=".-";
$lettertomorse["b"]="-...";
$lettertomorse["c"]="-.-.";
$lettertomorse["d"]="-..";
$lettertomorse["e"]=".";
$lettertomorse["f"]="..-.";
$lettertomorse["g"]="--.";
$lettertomorse["h"]="....";
$lettertomorse["i"]="..";
$lettertomorse["j"]=".---";
$lettertomorse["k"]=".-.";
$lettertomorse["l"]=".-..";
$lettertomorse["m"]="--";
$lettertomorse["n"]="-.";
$lettertomorse["o"]="---";
$lettertomorse["p"]=".--.";
$lettertomorse["q"]="--.-";
$lettertomorse["r"]=".-.";
$lettertomorse["s"]="...";
$lettertomorse["t"]="-";
$lettertomorse["u"]="..-";
$lettertomorse["v"]="...-";
$lettertomorse["w"]=".--";
$lettertomorse["x"]="-..-";
$lettertomorse["y"]="-.--";
$lettertomorse["z"]="--..";
$lettertomorse["1"]=".----";
$lettertomorse["2"]="..---";
$lettertomorse["3"]="...--";
$lettertomorse["4"]="....-";
$lettertomorse["5"]=".....";
$lettertomorse["6"]="-....";
$lettertomorse["7"]="--...";
$lettertomorse["8"]="---..";
$lettertomorse["9"]="----.";
$lettertomorse["0"]="-----";
$lettertomorse[" "]=" ";
$lettertomorse["."]=".-.-.-";
$lettertomorse[","]="--..--";
$lettertomorse["EOM"]=".-.-.";

$morsetoletter=array();
reset($lettertomorse);
while (list($letter,$code)=each($lettertomorse)) {
$morsetoletter[$code]=$letter;
}

function morse_encode($_REQUEST['text']) {
global $lettertomorse;

$line="";
for ($i=0;$i<strlen($_REQUEST['text']);$i++) {
$letter=substr($_REQUEST['text'],$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line.=$lettertomorse[$letter]." ";
}
return $line;
}

function morse_decode($string) {
global $morsetoletter;

$line="";
$letters=array();
$letters=explode(" ",$string);
foreach ($letters as $letter) {
// ignore unknown characters
if ($letter=="") $line.=" ";
if ($morsetoletter[$letter]=="") continue;

$line.=$morsetoletter[$letter];
}
return $line;
}
?>

<h1>Morse transletter</h1>

<form method="post" action="<?php echo $PHP_SELF ?>">
Real life text: <input type="text" name="txt" value="<?php echo '".($_REQUEST['text'])."'?>" size=50>
<br>
Morse text: <input type="text" name="morse" value="<?php echo '".($_REQUEST['morse'])."'?>" size=50>
<input type="submit" value="Convert">
<input type="reset">
<br>
<hr>

<?php

if ($_REQUEST['morse']!="") {
echo morse_decode($_REQUEST['morse']),"<br>\n";
}

if ($_REQUEST['text']!="") {
echo morse_encode($_REQUEST['text']),"<br>\n";
}

if ($_REQUEST['text']!="") {
echo "<hr>\n<pre>";

$line1="";
$line2="";

for ($i=0;$i<strlen($_REQUEST['text']);$i++) {
$letter=substr($_REQUEST['text'],$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line1.=$lettertomorse[$letter]." ";
$line2.=$letter;
for ($j=0;$j<strlen($lettertomorse[$letter]);$j++)
$line2.=" ";
$size+=strlen($lettertomorse[$letter])+1;

if ($size>70) {
echo "$line1\n";
echo "$line2\n";
echo "\n";
$line1="";
$line2="";
$size=0;
}
}

echo "$line1\n";
echo "$line2\n";
echo "\n";
echo "\n</pre>\n";
}
?>


Ciao

DarkMic
16-12-2005, 23:44
Ecco il codice corretto.

Ci sono solo alcuni notice, basta fare un controllo se sono settate le variabili oppure abbassi il livello di errori.

Nello script c'erano abbastanza errori. Non penso proprio che l'aggiornamento di php e apache provocasse errori sintattici e logici

<html>
<body>
<?php
$lettertomorse=array();
$lettertomorse["a"]=".-";
$lettertomorse["b"]="-...";
$lettertomorse["c"]="-.-.";
$lettertomorse["d"]="-..";
$lettertomorse["e"]=".";
$lettertomorse["f"]="..-.";
$lettertomorse["g"]="--.";
$lettertomorse["h"]="....";
$lettertomorse["i"]="..";
$lettertomorse["j"]=".---";
$lettertomorse["k"]=".-.";
$lettertomorse["l"]=".-..";
$lettertomorse["m"]="--";
$lettertomorse["n"]="-.";
$lettertomorse["o"]="---";
$lettertomorse["p"]=".--.";
$lettertomorse["q"]="--.-";
$lettertomorse["r"]=".-.";
$lettertomorse["s"]="...";
$lettertomorse["t"]="-";
$lettertomorse["u"]="..-";
$lettertomorse["v"]="...-";
$lettertomorse["w"]=".--";
$lettertomorse["x"]="-..-";
$lettertomorse["y"]="-.--";
$lettertomorse["z"]="--..";
$lettertomorse["1"]=".----";
$lettertomorse["2"]="..---";
$lettertomorse["3"]="...--";
$lettertomorse["4"]="....-";
$lettertomorse["5"]=".....";
$lettertomorse["6"]="-....";
$lettertomorse["7"]="--...";
$lettertomorse["8"]="---..";
$lettertomorse["9"]="----.";
$lettertomorse["0"]="-----";
$lettertomorse[" "]=" ";
$lettertomorse["."]=".-.-.-";
$lettertomorse[","]="--..--";
$lettertomorse["EOM"]=".-.-.";

$morsetoletter=array();
reset($lettertomorse);
while (list($letter,$code)=each($lettertomorse)) {
$morsetoletter[$code]=$letter;
}

function morse_encode($testo)
{
global $lettertomorse;

$line="";
for ($i=0;$i<strlen($testo);$i++) {
$letter=substr($testo,$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line.=$lettertomorse[$letter]." ";
}
return $line;
}

function morse_decode($string) {
global $morsetoletter;

$line="";
$letters=array();
$letters=explode(" ",$string);
foreach ($letters as $letter) {
// ignore unknown characters
if ($letter=="") $line.=" ";
if ($morsetoletter[$letter]=="") continue;

$line.=$morsetoletter[$letter];
}
return $line;
}
?>

<h1>Morse transletter</h1>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Real life text: <input type="text" name="txt" size=50>
<br>
Morse text: <input type="text" name="morse" size=50>
<input type="submit" value="Convert">
<input type="reset">
<br>
<hr>

<?php

if ($_POST['morse'] != "" ) {
echo morse_decode($_POST['morse']) . "<br>\n";
}

if ($_POST['txt']!="") {
echo morse_encode($_POST['txt']) . "<br>\n";
}

if ($_POST['txt']!="") {
echo "<hr>\n<pre>";

$line1="";
$line2="";

for ($i=0;$i<strlen($_POST['txt']);$i++) {
$letter=substr($_POST['txt'],$i,1);

// ignore unknown characters
if ($lettertomorse[$letter]=="") continue;

$line1.=$lettertomorse[$letter]." ";
$line2.=$letter;
for ($j=0;$j<strlen($lettertomorse[$letter]);$j++)
$line2.=" ";
$size+=strlen($lettertomorse[$letter])+1;

if ($size>70) {
echo "$line1\n";
echo "$line2\n";
echo "\n";
$line1="";
$line2="";
$size=0;
}
}

echo "$line1\n";
echo "$line2\n";
echo "\n";
echo "\n</pre>\n";
}
?>
</body>
</html>

VICIUS
17-12-2005, 00:35
Piccolo consiglio. Se vuoi avere la lettera i-esima di una stringa invece di usare substr puoi usare le parentesi graffe e accederci come un array.

ciao ;)

lucas72
17-12-2005, 14:57
Piccolo consiglio. Se vuoi avere la lettera i-esima di una stringa invece di usare substr puoi usare le parentesi graffe e accederci come un array.

ciao ;)

grazie comunque non è mio lo script

per Darkmic: grazie! Lo provo subito.

Perchè hai usato Post_ al posto del Request_ ecc ecc.
A me avevano detto che con il register_global su off
per prelevare le variabili ed usarle bisogno utilizzare il Request_
Ma non ho padronanza del php (e di tutte le impostazioni che cambiano
ad ogni versioni..anzi) e non conosco i problemi inerenti.
Ciao

DarkMic
17-12-2005, 15:06
Se non hai conoscenza allora fidati :D :D :D