允许URL中的任何字符

时间:2011-09-27 08:56:06

标签: php codeigniter post base64 codeigniter-2

我想使用带有codeIgniter的HTML / PHP Post发布一个URL。所以我在隐藏字段中输出我的URL的BASE64-Encoded,因为URL是从Googles响应页面爬行的,几乎任何字符都可以在URL中。因为我只在本地服务器上使用我的网站(这是我公司的SEO工具),我想在POST数据中启用任何字符。我已经用$config['permitted_uri_chars'] = '';尝试过了,但是没有用。我收到了“禁止键字符”错误,因为Base64字符串包含=

我正在使用CodeIgniter 2

编辑:

Fivell的回答是对的,谢谢。因此,对于感兴趣的人,我从上面的Fivell链接中获取代码并为CodeIgniter编写了一个小类。为此,请将名为Base64的文件添加到application / libraries文件夹并插入以下代码:

<?php

class Base64 {

    function url_encode($url) {
        $data = base64_encode($url);
        $data = str_replace(array('+','/','='),array('-','_',''),$data);
        return $data;
    }

    function url_decode($url) {
        $data = str_replace(array('-','_'),array('+','/'),$url);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }

}

?>

然后,您可以在任何控制器中使用它,方法是通过$this->load->library('base64);加载库并通过$this->base64->url_encode($url)$this->base64->url_decode($url)

解密或解密网址

2 个答案:

答案 0 :(得分:1)

http://www.php.net/manual/ru/function.base64-encode.php#63543

我认为问题是php中的标准base64编码/解码,这不是url safe

答案 1 :(得分:1)

这不是codeigniter问题,对于POST传输,base64不安全。我使用这对函数来安全地编码/解码POST数据。

/**
 *
 * Safely encrypts data for POST transport
 * URL issues
 *  transforms + to spaces
 *  / are param value separators
 *  = are param value separators
 *
 *  we process the string on reverse
 * @param string $string
 */
function my_urlsafe_b64encode($string)
{
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_','.'),$data);
    return $data;
}

/**
 *
 * The encoding string had to be specially encoded to be transported
 * over the HTTP
 *
 * The reverse function has to be executed on the client
 *
 * @param string $string
 */
private function urlsafe_b64decode($string)
{
  $data = str_replace(array('-','_','.'),array('+','/','='),$string);
  $mod4 = strlen($data) % 4;
  if ($mod4) {
    $data .= substr('====', $mod4);
  }
  return base64_decode($data);
}