5

我的申请中有一个注册表单。当有人完成注册时,会收到一封电子邮件,其中包含确认注册的链接(典型情况)。

链接是这样的

http://www.myDomain.com/registration/validation/m0NQGT4XzQgId5zuH/1PrDqNSP7YWq81Mba8cSXLb1WsQ5aVqf2sQ3Ece3ZdmxYvLjztaGp7Xmhv8ArjFET/8Q==

  • 注册是控制器
  • 验证是功能
  • 最后一个是用户名

编码用户名:

$encrypted_username = $this->encrypt->encode($username);

但是,访问该链接会返回以下错误

所提交的网址带有不被接受的字符。

设置$config['permitted_uri_chars'] = '';一切正常,但他们说我们不应该这样做。

那么,我该如何正确解决这个问题呢?

4

2 回答 2

7

我将 config.php 更改为

$config['permitted_uri_chars'] = '+=\a-z 0-9~%.:_-';

现在工作正常,我希望这是一个安全的解决方案。

于 2012-12-21T16:22:39.030 回答
0

您可以通过以下方式为编码和解码 url 字符串创建帮助程序。

1) 在 application/helper 文件夹中创建一个帮助文件并粘贴到编码帮助函数下面。

<?php

/**
 * Encodes a string as base64, and sanitizes it for use in a CI URI.
 * 
 * @param string $str The string to encode
 * @return string
 */
function url_base64_encode($str = '')
{
    return strtr(base64_encode($str), '+=/', '.-~');
}

/**
 * Decodes a base64 string that was encoded by url_base64_encode.
 * 
 * @param object $str The base64 string to decode.
 * @return string
 */
function url_base64_decode($str = '')
{
    return base64_decode(strtr($str, '.-~', '+=/'));
}

2)然后您可以使用这些函数替代base64_encode()和base64_decode()等核心函数

于 2018-01-10T18:30:53.240 回答