Lets say I have some code:
$text = $_POST['secret'];
$replaces = array(
'a' => 's',
'b' => 'n',
'c' => 'v',
'd' => 'f',
'e' => 'r',
'f' => 'g',
'g' => 'h',
'h' => 'j',
'i' => 'o',
'j' => 'k',
'k' => 'l',
'l' => 'a',
'm' => 'z',
'n' => 'm',
'o' => 'p',
'p' => 'q',
'q' => 'w',
'r' => 't',
's' => 'd',
't' => 'y',
'u' => 'i',
'v' => 'b',
'w' => 'e',
'x' => 'c',
'y' => 'u',
'z' => 'x',
);
$text = str_replace(array_keys($replaces),array_values($replaces),$text);
echo "You're deciphered message is: ".$text;
}
?>
<form action="" method="post">
<p>Enter the secret message: <input name="secret" type="text"/></p>
<input class="button" type="submit" name="submit" value="Submit"/>
</form
Here, a user inputs a secret message, and then the characters are replaced by new characters. For every letter on a keyboard it is replaced with the letter to the right.
eg. if a user enters “gwkki” the output will be “hello”.
However the above code outputs aeaae and NOT hello. It outputs “aeaae”. This is because the letter h changes to j, then j changes to k, then k changes l, then l changes to a. and so on with the other letters. Is there any way for the text to be scanned and changed once??
In the PHP Manual it’s clearly explained your problem, at the end of the page they advice to use strtr() which does exactly what you want.
Replace
with
which does exactly what you want, it replaces one character with another character.
The documentation of strtr() is here: http://www.php.net/manual/en/function.strtr.php