2017-02-28 105 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