我正在发送指向用户电子邮件的链接,点击该链接激活其帐户。 示例链接: http://test.com/welcome/make_active_user/($ USER_ID)
然后我在我的控制器中编码$user_id
,之后我的链接看起来像下面的那个
到目前为止一切都很好。现在我要解码$user_id
,
但“/
”符号会产生问题。 codeigniter只在“/
”符号之前使用了那些字符。如何在没有“/
”
我在我的控制器中使用“$this->encrypt->encode($user_id,$key);
”
请帮忙
答案 0 :(得分:4)
您需要修改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);
答案 1 :(得分:3)
在发送如下链接之前,只需将编码后的$user_id
传递给php函数urlencode()
:
$user_id_link = urlencode($user_id);
使用url decode()
解析您从链接中获得的字符串,如下所示:
$user_id = urldecode($user_id_link);
答案 2 :(得分:1)
我在过去遇到过同样的问题,codeigniter encrypt->encode()
已禁止使用字符链接但我执行了以下操作来解决问题
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);
答案 3 :(得分:0)
我认为您的问题不在' /',可能与' ='符号
要对CodeIgniter中的网址进行编码和解码,您可以使用以下任何一种php本机函数:http://php.net/manual/en/ref.url.php
但为了避免在CodeIgniter中解码编码的网址时遇到问题,您可以在每种情况下添加您需要使用的特殊字符(例如,在您的情况下为' =')到$ config [&# 39; allowed_uri_chars']在文件application / config / config.php
中答案 4 :(得分:0)
尝试一下:
$query = urldecode($query);
$query = urlencode($query);