如何在 CodeIgniter URL 中允许 URI 编码字符?
Posted
技术标签:
【中文标题】如何在 CodeIgniter URL 中允许 URI 编码字符?【英文标题】:How do you allow URI encoded characters in CodeIgniter URLs? 【发布时间】:2012-05-14 10:55:35 【问题描述】:我正在使用CodeIgniter 1.7.1。我允许的 URI 字符设置如下:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@&\-';
当我输入http://website.com/index.php/controller/method/test%21 之类的地址时,页面无法加载并显示错误:
代码点火器:遇到错误您提交的 URI 有 不允许使用的字符。
我不明白。允许%20
(空格),但不允许%21
(感叹号)。
【问题讨论】:
允许字符列表中有感叹号吗?我认为浏览器将 %21 解释为 !,所以当 CodeIgniter 解析它时,它会看到“!”,而不是“%21” @Goldentoa11 我是否必须将所有可能的标点符号以其原始形式添加到列表中?我是否应该只允许所有角色避免编写庞大的列表?此配置文件中的 cmets 表示“除非您知道自己在做什么,否则不允许使用所有字符”。那么如果我允许所有字符,会打开哪些安全漏洞? 根据您的第一个问题,我认为您必须这样做。根据您的第二个问题,如果 CI 说不这样做,我会按照它所说的去做,除非您了解幕后发生的事情,而我不了解。根据你的第三个问题,我不知道会打开什么样的洞。 【参考方案1】:%21
在 codeigniter 中解析为 !
。所以codeigniter不支持这个请!进入允许的 uri 配置文件:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@&\-!';
【讨论】:
url 中的 (+) 怎么样 我尝试像这样添加它,它在 url$config['permitted_uri_chars'] = 'a-z 0-9~%.:;,_^$-+';
中给了我不允许的字符
CI 3 应该在哪里添加上述行?【参考方案2】:
尝试用这个转义它,应该可以工作
\\+
【讨论】:
以上是关于如何在 CodeIgniter URL 中允许 URI 编码字符?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 codeigniter form_validation 类中允许空值或数值?
如何在 WebView Flutter 中允许 mailto 和 tel URL 方案?