PHP在str_replace函数中替换错误


php doing wrong replace in str_replace function

我编写了一个php函数来替换多个字符串

$searchArray = array("0","9","8","7","6","5","4","3","2","1","!","@","#","$","%","^","&","*","(",")","z","x","y","w","u","v","j","i","h","g","f","e","d","c","b","a");
$replaceArray = array("1","2","3","4","5","6","7","8","9","0","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");       
$string='protect your php code';
echo $code=str_replace($searchArray, $replaceArray, $string); 

its result = provxt moor PSP xowv,这似乎是正确的

当我反转它的位置

$string='protvxt moor psp xowv';       
$searchArray = array("1","2","3","4","5","6","7","8","9","0","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");   
$replaceArray = array("0","9","8","7","6","5","4","3","2","1","!","@","#","$","%","^","&","*","(",")","z","x","y","w","u","v","j","i","h","g","f","e","d","c","b","a");
echo $code=str_replace($searchArray, $replaceArray, $string); 

它给我这个答案= eifgecg bffi的cfde(这是错误的),它应该正确地反转并给出答案保护你的PHP代码

老实说,我不知道为什么php做错了

我把上面的代码粘贴到这里

http://codepad.org/xbSCieZl

请检查这个,我想知道我做错了什么,它让我生气

你的数组应该包含相同的字符。

第一次转换不会改变'pro'和'protect'字符

但是倒序可以

编辑:
对不起,这个答案是错误的,因为我没有意识到以下问题,詹姆斯上面提到:"这一般不会工作。你的测试串很幸运。如果你试图对字符串"123"进行编码,你会得到"123",因为1被变成了0,然后0又变成了1,以此类推。请参阅str_replace陷阱- James"

你可以使用上面的建议strtr()

$search = "abcdefghijklmnopqrstuvwxyz";
$replace = "zabcdefghijklmnopqrstuvwxy"; 
$string='protect your php code';
echo $code=strtr($string, $search, $replace);   
echo '<br>';    
echo strtr($code, $replace, $search); 

输出:
保护你的PHP代码

编辑:
此外,您可以生成您的字符串和随机化:

$search = implode("",range("a","z")).implode("",range("0","9"));
$replace = str_shuffle($search);
http://codepad.org/DZJRp9Zx