2017-02-28 27 views
1

我使用str_replace()後解碼編碼值有問題。它與編碼完美配合,但是當我嘗試解碼它時,它什麼也不返回。我也配置了$config['encryption_key'],但我仍然在codeigniter 3.x中遇到這個問題。請幫助我解決這個問題。Codeigniter解碼函數不返回值

/*encoding*/ 
$tmp = $this->encrypt->encode($val); 
$encoded_val = str_replace(array('+','/','='),array('-','_',''),$tmp); //removal of specific characters to eliminate uri segment issue 
return $encoded_val; 

/*decoding*/ 
$decoded_val = str_replace(array('-','_',''),array('+','/','='),$val); //getting original encoded value  
$tmp = $this->encrypt->decode($decoded_val);      
return $tmp; 



//encryption key 
$config['encryption_key'] = "someencryptionkey"; 
+0

它的工作完美與以前的版本,即codeigniter 2.x – Kathirmalan

+0

停止使用'CI_Encrypt',它已被棄用的原因。 – Narf

+0

https://www.codeigniter.com/user_guide/libraries/encrypt.html – qwertzman

回答

2

你的代碼不能可靠地工作:你將能夠獲得原始值回來的唯一時期,是當編碼值不包含任何-_=字符。

如果是這樣,你的更換將使當你做到這一點是不可能的,因爲解碼:

$decoded_val = str_replace(array('-','_',''),array('+','/','='),$val); 

,你不會得到值回來時,你使用$this->encrypt->encode($val)你了。例如,所有-字符將被轉換爲+個字符,因此如果您的原始編碼值有任何值,現在不會。

當然,用=代替空字符並沒有任何意義。

爲了能夠可靠地進行編碼和解碼,在編碼/解碼之前不要做任何字符替換。

+0

感謝Mr.Jeroen的關注,但是如果我沒有使用字符替換,那麼當我傾向於使用URI段時它會出現邏輯錯誤。例如。 http://example.com/module/QON6aMbk44VdkOukXjs_qcPkC1s7JfJYQf9Pd9LyOZcOAt5RqvETHnjMtKjMS9sFbR6xjDS4/q9KQ1kz8YRDmA – Kathirmalan

+0

@kathirmalan如果你想在URL中使用一個字符串,你需要正確的使用,例如'url_encode()'進行編碼,但不應該有什麼用這個。 – jeroen

+1

非常感謝Jeroen先生,它完美的工作。 – Kathirmalan