我想使用带有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)
答案 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);
}