gpt4 book ai didi

php - CodeIgniter URI 中的百分比符号

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:52:01 26 4
gpt4 key购买 nike

我需要将编码字符串传递给 CodeIgniter Controller 。

示例:

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 是否存在不允许的字符。这是通过将允许的字符列入白名单来实现的。可以在/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 %

所有字符都可以...但是加号 + 呢?它不在允许的字符列表中!然而 URI 没有被提示?这是你的问题的关键。

B) CodeIgniter urldecodes白名单字符检查之前的 URI 段,以防止有人通过简单地对 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/

糟糕...urldecoding 将 %26 转换为 &

这不是允许的字符。谜团 ;-) 解决了

关于php - CodeIgniter URI 中的百分比符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com