我通过点击该链接向我的用户的电子邮件发送链接以激活他的帐户.示例链接:http: //test.com/welcome/make_active_user/($ user_id)
然后我$user_id在我的控制器中编码,之后我的链接看起来像下面的那个
一切都很好.现在我想解码$user_id,但" /"符号创建问题.codeigniter只在" /"符号之前使用了那些字符.如何在没有" /"的情况下获得编码的user_id的输出
我$this->encrypt->encode($user_id,$key);在我的控制器中使用" "
请帮忙
只需将编码传递$user_id给 php 函数urlencode(),然后发送如下链接:
$user_id_link = urlencode($user_id);
Run Code Online (Sandbox Code Playgroud)
并对从链接返回的字符串进行解码,url decode()如下所示:
$user_id = urldecode($user_id_link);
Run Code Online (Sandbox Code Playgroud)
您需要修改加密类以对 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以创建一个$url_safe链接
从您的配置中获取加密密钥
$key = $this->config->item('encryption_key');
Run Code Online (Sandbox Code Playgroud)
通过传递 true 作为第三个参数来创建 url 安全字符串
$encoded_url_safe_string = urlencode($this->encrypt->encode('secret', $key, true));
Run Code Online (Sandbox Code Playgroud)
您将需要使用rawurldecode来解码字符串
$decoded_url_safe_string = rawurldecode($encoded_url_safe_string, $key);
Run Code Online (Sandbox Code Playgroud)