如何在codeigniter中编码/解码url

时间:2015-03-23 13:57:07

标签: 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);

请帮忙

5 个答案:

答案 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()已禁止使用字符链接但我执行了以下操作来解决问题

  1. 首先encode() $user_id
  2. 只需使用允许的字符替换加密字符串中的不允许字符。
  3. 现在解码前将这些字符替换回原来的字符
  4. decode()您的$user_id
  5. 这是代码:

    $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);