如何在codeigniter中对url进行编码/解码


How to encode/decode url in codeigniter

我正在向我的用户的电子邮件发送一个链接,通过单击该链接来激活他的帐户。示例链接: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使用字符,但我做了以下操作来解决问题

  1. 第一个encode()您的$user_id
  2. 只需将加密字符串中不允许的字符替换为允许的字符即可
  3. 现在,在解码之前,将这些字符替换回原始字符
  4. 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);