Rad*_*duM 5 php regex codeigniter
我需要将编码的字符串传递给CodeIgniter控制器.
示例:
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
Run Code Online (Sandbox Code Playgroud)
我的问题是百分比符号是一个不允许的角色.我试图用以下内容更改配置文件:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
Run Code Online (Sandbox Code Playgroud)
该+是好的,但%无效.你能帮我改一下这个reg exp %吗?它会允许这个符号吗?提前致谢!
jit*_*ter 26
将" - "放在字符串的末尾,否则将其解释为范围.您可以看到%已经在允许的字符列表中.
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
Run Code Online (Sandbox Code Playgroud)
咳咳......再看一下你的样品串.这就是你得到" The URI you submitted has disallowed characters"的原因.
简短的解释:添加符号和到允许的字符列表
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
Run Code Online (Sandbox Code Playgroud)
很长的解释
有两件事在一起玩.
A) CodeIgniter检查所有URI 段是否有不允许的字符.这通过将允许的字符列入白名单来实现.允许哪些允许在变量中的/ system/application/config/config.php中检查$config['permitted_uri_chars'].默认值设置为类似'a-z 0-9~%.:_-'.因此允许从a到z,空格,所有数字和以下字符*〜%.:_-的所有字母.
好吧,让我们将它与您说的有效的示例URI进行比较
a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
Run Code Online (Sandbox Code Playgroud)
所有字符都OK ......但等待什么的加号+?它不在允许的字符列表中!然而URI并没有被抱怨?这是您的问题的关键.
B) CodeIgniter 在白名单字符检查之前对URI段进行url解码,以防止有人通过简单地对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/
Run Code Online (Sandbox Code Playgroud)
哎呀... urldecoding将%26翻译为&
哪个不是允许的角色.神秘;-)解决了
| 归档时间: |
|
| 查看次数: |
11160 次 |
| 最近记录: |