You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter 4(CI4)中允许URL包含特殊字符?

CodeIgniter 4 允许URL包含特殊字符的配置方法

CodeIgniter 4 取消了CI3中config.php里的$config['permitted_uri_chars']配置项,转而通过URI过滤器和路由规则来控制URL字符的允许范围,具体操作如下:

1. 配置URI过滤器

在app/Config/Filters.php文件中,修改全局过滤器里的uri规则,自定义允许的特殊字符:

  • 默认的uri过滤器会过滤非标准字符,你可以通过options参数指定允许的字符集合
  • 示例配置(允许常见特殊字符):
public $globals = [
    'before' => [
        // 保留其他原有过滤器,修改uri项
        'uri' => ['filter' => 'uri', 'options' => ['permitted_chars' => 'a-z 0-9~%.:_\-@!$&\'()*+,;=']],
    ],
    // 其余配置保持不变
];
  • 注意:除非有特殊需求,不建议全局禁用uri过滤器,避免引入安全风险。

2. 适配路由规则

如果URL中包含特殊字符的部分是路由参数,需要确保路由能正确匹配:

  • 使用(:any)占位符可以匹配除斜杠外的所有字符(包括大部分特殊字符):
$routes->get('profile/(:any)', 'ProfileController::show/$1');
  • 若需要更精确的匹配,可自定义正则表达式限定允许的字符:
$routes->get('product/([a-z0-9\-@]+)', 'ProductController::detail/$1');

3. 额外注意点

  • 安全优先:避免允许/、\等可能引发路径遍历的字符,防止安全漏洞
  • URL编码:若特殊字符是以URL编码形式(如%20代表空格)传递,CI4会自动解码,无需额外配置

内容的提问来源于stack exchange,提问作者Jasmeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:02:36