在CodeIgniter中的URL中包含特殊字符

时间:2013-02-18 07:26:37

标签: codeigniter url encoding routing special-characters

我想要像

这样的网址
  

http://www.example.com/(。*)

但CodeIgniter不允许我这样做。当我尝试访问某些URL时,我收到404错误(并且请求的页面存在)。

我知道我可以在URL中设置允许的字符,但我想到了编码它。但是,如果我做这样的事情:

http://www.example.com/<?php echo rawurlencode(string) ?>

甚至:

http://www.example.com/<?php echo rawurlencode(rawurlencode(string)) ?>

我还有404.为什么? '%'是允许的字符,为什么它不起作用?我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:1)

您可以通过 config / config.php permitted_uri_chars密钥允许某些迹象。

然而,虽然我不完全确定,但我确实认为这些是默认限制以增加安全性。正如相关解释所示:

/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs.  When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/

例如,对当前设置如此简洁的是,您允许足够少的uris来解析ID,而不会冒''""或类似的方式让它们受到攻击。当然有自动和手动$this->db->escape(),但这只会增加更多故障。

答案 1 :(得分:0)

如果编译的字符串有urlencoded,尝试将URI字符串传递给/时会产生错误,codeigniter会尝试将其解析为段,从而呈现404,您需要使用的是查询字符串。

$string = rawurlencode(string)

http://www.example.com/class/method/?string=$string

然后是你的方法

使用get

function method()
{
   $this->input->get('string');

}

答案 2 :(得分:0)

如果您想在URL中添加斜杠/,请使用双原始编码。例如:

$string = rawurlencode(rawurlencode('/sth/sth'));