我正在向我的用户的电子邮件发送一个链接,通过单击该链接来激活他的帐户。示例链接:http://test.com/welcome/make_active_user/($user_id)
然后我在控制器中对$user_id
进行编码,然后我的链接看起来像下面的一个
http://test.com/welcome/make_active_user/17elQOjxrOXDsZdDZVFY7JFrB0TJFojdS+5OTpiIq/XIaVrDfVWQ7xgOXqGsURIFe/Udvm/XHrNWtbZXFA2g==
到目前为止一切都很好。现在我想解码CCD_ 2,但"/
"符号产生了问题。codeigniter只接受"/
"符号之前的那些字符。如果没有"/
",我如何获得编码user_id的输出
我在控制器中使用"$this->encrypt->encode($user_id,$key);
"
请帮助
在发送这样的链接之前,只需将编码的$user_id
传递给php函数urlencode()
:
$user_id_link = urlencode($user_id);
然后用url decode()
解码你从链接中得到的字符串,如下所示:
$user_id = urldecode($user_id_link);
您需要修改encrypt类来编码url安全字符串。
class MY_Encrypt extends CI_Encrypt
{
function encode($string, $key="", $url_safe=true)
{
$ret = parent::encode($string, $key);
if ($url_safe)
{
$ret = strtr(
$ret,
array(
'+' => '.',
'=' => '-',
'/' => '~'
)
);
}
return $ret;
}
function decode($string, $key="")
{
$string = strtr(
$string,
array(
'.' => '+',
'-' => '=',
'~' => '/'
)
);
return parent::decode($string, $key);
}
}
然后您可以创建一个$url_safe
链接
从配置中获取加密密钥
$key = $this->config->item('encryption_key');
通过将true作为第三个参数来创建一个url安全字符串
$encoded_url_safe_string = urlencode($this->encrypt->encode('secret', $key, true));
您需要使用rawurldecode
来解码字符串
$decoded_url_safe_string = rawurldecode($encoded_url_safe_string, $key);
我过去也遇到过同样的问题,代码点火器encrypt->encode()
不允许URL使用字符,但我做了以下操作来解决问题
- 第一个
encode()
您的$user_id
- 只需将加密字符串中不允许的字符替换为允许的字符即可
- 现在,在解码之前,将这些字符替换回原始字符
decode()
您的$user_id
这是代码:
$this->encrypt->encode($user_id,$key);
$user_id = strtr($user_id,array('+' => '.', '=' => '-', '/' => '~'));
//your email body (link the user id here)
现在是解码的时候了
$user_id = strtr($user_id,array('.' => '+', '-' => '=', '~' => '/'));
$this->encrypt->decode($user_id,$key);
我认为问题不在于'/',可能在于'='符号。
要在CodeIgniter中编码和解码url,您可以使用以下php本机函数中的任何一个:http://php.net/manual/en/ref.url.php
但是,为了避免在CodeIgniter中解码编码的url时出现问题,您可以在文件application/config/config.php 中的$config['permited_ur_chars']中添加在每种情况下都需要使用的特殊字符(如您的情况下的'=')
试试这个:
$query = urldecode($query);
$query = urlencode($query);