在CodeIgniter的URI百分号(Percent Symbol in CodeIgniter

2019-06-23 18:28发布

我需要一个编码字符串传递到笨控制器。

例如

DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/

我的问题是百分号是不允许使用的字符。 我试图改变与下面的配置文件:

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

+是好的,但%是无效的。 你能帮我改变这一章EXP所以它将使%符号? 提前致谢!

Answer 1:

把“ - ”字符串的结尾,否则它就会被解释为范围。 在%已经在允许的字符列表,你可以看到。

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

咳咳......在你的样品字符串再次照看。 这就是为什么你会得到“ The URI you submitted has disallowed characters ”。

简短的解释 :添加符号允许的字符列表

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

龙解释

有两件事情一起玩。

A)笨检查不允许的字符所有URI 。 这通过白名单允许的字符。 哪些被允许可以在/ 系统/应用/配置/ config.php文件中进行检查$config['permitted_uri_chars']变量。 默认值设置为类似'az 0-9~%.:_-' 。 因此,所有从字母A到Z,空格,所有数字和下列字符*〜%:_-是允许的。

好吧,让我们比较,为您的样本URI,你说的作品

a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/   //note the missing %

所有字符都OK ......但等待什么的加号+? 这是不是在允许的字符列表! 然而URI是不抱怨? 这是关键,你的问题。

B)笨urldecodes之前的URI段白名单字符检查以防止有人绕过通过简单URL编码URI中的检查。 因此,+被解码的空间。 此行为是由于进行urlencode (其编码空格作为+符号,偏离RFC 1738 )。 这就解释了为什么+号是允许的。

这两件事情结合也解释了为什么这个特定URI不起作用。

urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/

哎呦......在urldecoding转换%26

这是不是允许的字符。 谜;-)解决



Answer 2:

试试这个:$配置[ 'uri_protocol'] = “PATH_INFO”;



文章来源: Percent Symbol in CodeIgniter URI