如何在CodeIgniter中允许URI编码字符?

5

我正在使用CodeIgniter 1.7.1。我的允许URI字符设置如下:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@&\-';

当我输入类似于http://website.com/index.php/controller/method/test%21这样的网址时,页面无法加载并显示以下错误信息:
Code igniter: An Error Was EncounteredThe URI you submitted has disallowed characters.
我不明白。空格%20是允许的,但感叹号%21却不行。

2
您的允许字符列表中是否包含感叹号?我认为浏览器将%21解释为!,因此当CodeIgniter解析它时,它会看到“!”而不是“%21”。 - Goldentoa11
@Goldentoa11,我需要在列表中添加所有可能的标点符号吗?我是不是应该允许所有字符,以避免编写一个巨大的列表?这个配置文件中的注释说“除非您知道自己在做什么,否则不要允许所有字符”。那么,如果我允许所有字符,会有哪些安全漏洞呢? - JoJo
根据你的第一个问题,我认为那是你必须要做的。根据你的第二个问题,如果CI说不要这样做,我会遵循它的建议,除非你理解幕后发生了什么,而我不知道。至于你的第三个问题,我不知道会开放哪些漏洞。 - Goldentoa11
2个回答

6

%21在CodeIgniter中会被解析为!。因此,CodeIgniter不支持在URI配置文件中使用!。请将其转换为允许的字符。

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@&\-!';

在 URL 中的 ( + ) 是什么意思? - Alaa M. Jaddou
我尝试像这样添加,但它给我URL中不允许的字符 $config['permitted_uri_chars'] = 'a-z 0-9~%.:;,_^$-+'; - Alaa M. Jaddou
以上代码应该添加到CI 3的哪里? - Razvan Zamfir

-1

尝试使用这个进行转义,应该可以解决问题

\\+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接