Php CodeIgniter URI中的百分比符号
我需要将一个编码字符串传递给CodeIgniter控制器 示例:Php CodeIgniter URI中的百分比符号,php,regex,codeigniter,Php,Regex,Codeigniter,我需要将一个编码字符串传递给CodeIgniter控制器 示例: DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/ 我的问题是百分比符号是不允许的字符。我已尝试使用以下内容更改配置文件: $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%'; +正常,但%无效。您能帮我更改此reg exp以允许使用%符号吗?提前谢谢 将“-”放在字符串的末尾,否则它将被解释为范围。如您所见,%已在允许的字符列表中 $co
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
我的问题是百分比符号是不允许的字符。我已尝试使用以下内容更改配置文件:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
+
正常,但%
无效。您能帮我更改此reg exp以允许使用%
符号吗?提前谢谢 将“-”放在字符串的末尾,否则它将被解释为范围。如您所见,%已在允许的字符列表中
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
啊哼。。。再次查看示例字符串之后。这就是为什么会出现“
您提交的URI包含不允许使用的字符”
”
简短解释:将与号添加到允许的字符列表中
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
详细解释 有两件事在一起玩 A)CodeIgniter检查所有URI段是否存在不允许的字符。这是通过白名单允许的字符实现的。可以在
$config['allowed\u uri\u chars']
变量的/system/application/config/config.php中检查哪些是允许的。默认值设置为类似于'a-z 0-9~%。:-'
。因此,允许从a到z的所有字母、空格、所有数字和以下字符*~%:-
好的,让我们将其与您所说的有效的示例URI进行比较
a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
所有角色都很好。。。但是等等,加号+呢?它不在允许的字符列表中!但是URI没有受到抱怨?这是解决你问题的关键
B)CodeIgniter在白名单字符检查之前设置URI段,以防止有人通过简单地对URI进行URL编码来绕过检查。因此,+被解码为一个空格。这种行为是因为(它将空格编码为+符号,偏离)。这就解释了为什么允许使用+符号
这两件事的结合也解释了为什么这个特定的URI不起作用
urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/
哎呀。。。URL解码将%26转换为&
这是不允许的字符。米斯特里;-)已解决请尝试以下操作:
$config['uri_protocol']=“路径信息” 感谢您的输入,但这并不能解决我的问题:(我仍然得到您提交的URI包含不允许的字符。我按照您的建议更改了行,它工作正常,但当我在url中输入%时,它会断开。我尝试的示例是相同的:DO_SOMETHING/Coldplay/Fix+you/273/X+%26+Y/如果我删除%works perfect…增强的答案。第一次忽略了特定于您的URI的问题:)该死的URLDECODE,我看过URI.php中的代码,但是xss clean正在做这项工作,所以我错过了它。谢谢你,现在一切都很完美。这是一个很好的答案。很好的阐述和研究,感谢你花时间在它上面。