Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter URI中的百分比符号_Php_Regex_Codeigniter - Fatal编程技术网

Php CodeIgniter URI中的百分比符号

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

我需要将一个编码字符串传递给CodeIgniter控制器

示例

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正在做这项工作,所以我错过了它。谢谢你,现在一切都很完美。这是一个很好的答案。很好的阐述和研究,感谢你花时间在它上面。