2014-07-09 20 views
-1

嗯,我編寫一個PHP函數用於多個字符串替換PHP在做str_replace函數功能失常更換

$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); 

其結果= protvxt沼地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 ehe cfde(這是錯誤的)它應該正確顛倒並給出答案保護你的php代碼

老實說,我不知道爲什麼PHP這樣做不對

我粘貼以上代碼在這裏

http://codepad.org/xbSCieZl 

請這個我想知道我做錯了這讓我很惱火

+2

關鍵的問題是,並非所有的字母編碼,但即使你對其進行解碼回來,甚至可以解碼未編碼的字母。 –

+0

不知道你試圖做什麼以及你期望的結果,但是檢查搜索並替換每個數組中的數組和字符位置。例如,在上面的代碼中,0被1代替,9代替2等等。數組也應該是相同的長度 – StudioArena

+0

如果你只做單字符換字符,['strtr()'](http:// php.net/strtr)可能比'str_replace()'更合適。 ([鍵盤示例](http://codepad.org/KkjVrahZ)) – Wiseguy

回答

1

你的陣列應該包含相同的字符。

第一轉換不會改變從「保護」

字符「親」,但倒車呢。

編輯:
對不起,這個答案是錯誤的,因爲我沒有意識到下面的問題,詹姆斯上面提到:「這一般不會工作,你的測試字符串很幸運,如果你嘗試編碼字符串「123」你會得到「123」,因爲1變成了零,然後在零後面變成1等,看看str_replace gotchas - James「

你可以使用上面的建議strtr函數的效率()

$search = "abcdefghijklmnopqrstuvwxyz"; 
$replace = "zabcdefghijklmnopqrstuvwxy"; 

$string='protect your php code'; 

echo $code=strtr($string, $search, $replace); 
echo '<br>';  
echo strtr($code, $replace, $search); 

輸出:
oqnsdbs xntq奧戈bncd
保護你的PHP代碼

編輯:
還可以生成您的字符串和隨機:

$search = implode("",range("a","z")).implode("",range("0","9")); 
$replace = str_shuffle($search); 

http://codepad.org/DZJRp9Zx

+0

我的數組長度是正確的,如果36個字母是搜索數組,然後36個字母替換數組 – user3718334

+0

另一個攪拌器:12345變成+)(*&當我試圖扭轉它給我klmno一個蹩腳的語言不能處理基本功能 – user3718334