我需要将编码的字符串传递给CodeIgniter控制器。
示例:
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
我的问题是百分比符号是一个不允许的字符。我试图用以下内容更改配置文件:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
+
没问题,但%
无效。你能帮我修改一下这个reg exp,它会允许%
符号吗?提前谢谢!
答案 0 :(得分:25)
将“ - ”放在字符串的末尾,否则会将其解释为范围。正如您所见,%已经在允许的字符列表中。
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
咳咳......再次看完你的样品串后。这就是你得到“The URI you submitted has disallowed characters
”的原因。
简短说明:将&符号& 添加到允许的字符列表中
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
长解释
有两件事在一起玩。
A) CodeIgniter会检查所有URI 段是否包含不允许的字符。这通过将允许的字符列入白名单来实现。可以在$config['permitted_uri_chars']
变量的/ system / application / config / config.php 中检查允许的内容。默认值设置为'a-z 0-9~%.:_-'
。因此,允许从a到z,空格,所有数字和以下字符*〜%。:_-的所有字母。
好的,让我们将它与你说的工作原理
进行比较a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
所有角色都可以......但是等一下加号 + 呢?它不在允许的字符列表中!然而URI并没有被抱怨?这是你问题的关键。
B) CodeIgniter urldecodes白名单字符检查之前的URI段,以防止有人通过简单地对URI进行urlencoding来绕过检查。因此 + 被解码为空格。这种行为是因为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 翻译为&
哪个不是允许的角色。神秘;-)解决了
答案 1 :(得分:0)
试试这个: $ config ['uri_protocol'] =“PATH_INFO”;