Codeigniter解码函数不返回值

时间:2017-02-28 08:55:04

标签: php codeigniter encryption

使用str_replace()后解码编码值时遇到问题。它与编码完美配合,但当我尝试解码它时,它什么都不返回。我还配置了$config['encryption_key'],但我仍然在codeigniter 3.x中遇到此问题。请帮我解决这个问题。

/*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";

1 个答案:

答案 0 :(得分:2)

您的代码无法可靠地运行:只有当您的编码值不包含-_或{{1}中的任何一个时,您才能获得原始值的唯一时间} characters。

如果确实如此,您的替换将无法解码,因为当您这样做时:

=

您将无法获得使用$decoded_val = str_replace(array('-','_',''),array('+','/','='),$val); 时的值。例如,所有$this->encrypt->encode($val)字符都将转换为-个字符,因此如果您的原始编码值有任何字符,则现在不会。

当然用+替换空字符并没有任何意义。

为了能够可靠地编码和解码,在编码之后/解码之前不要进行任何字符替换。