如何在codeigniter中编码/解码url

Sum*_*mon 6 php codeigniter

我通过点击该链接向我的用户的电子邮件发送链接以激活他的帐户.示例链接:http: //test.com/welcome/make_active_user/($ user_id)

然后我$user_id在我的控制器中编码,之后我的链接看起来像下面的那个

http://test.com/welcome/make_active_user/17elQOjxrOXDsZdDZVFY7JFrB0TJFojdS+5OTpiIq/XXIaVrDfVWQ7xgOXXqGsURIFe/Udvm/XHrNWtbZXFA2g==

一切都很好.现在我想解码$user_id,但" /"符号创建问题.codeigniter只在" /"符号之前使用了那些字符.如何在没有" /"的情况下获得编码的user_id的输出

$this->encrypt->encode($user_id,$key);在我的控制器中使用" "

请帮忙

MDe*_*ein 6

只需将编码传递$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)


Phi*_*lip 4

您需要修改加密类以对 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)