【问题标题】:Las URI segment is zero (/0) -> error DIsallowed charactersLas URI 段为零 (/0) -> error DISallowed characters
【发布时间】:2017-05-22 08:56:02
【问题描述】:

我试图找到解决此问题的方法,但没有任何效果。当我的 REST api URI 请求是,例如。 https://serverip/meeting/userlist/0

我总是收到错误“您提交的 URI 包含不允许的字符”。我什至尝试将配置文件中的此参数留空:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-+';

但我得到了同样的错误。

是否允许在 URI 末尾有一个 0 作为该段的唯一内容?因为我需要它来检索 id = 0 的用户。

非常感谢。

编辑 - 已解决:

你好,

终于解决了。我发现很久以前我们在URI.php中评论了一个与UTF8编码相关的检查

if ( !empty($str) && !empty($this->_permitted_uri_chars) && !preg_match('/^['.$this->_permitted_uri_chars.']+$/i'.(UTF8_ENABLED ?'u ' : ''), $str))

我们只留下了第一个条件。我们有一些代码问题在回复该评论后似乎无法重现。 /0 现在可以正常工作了。

很抱歉,最后是我们自己修改的问题。

谢谢。

【问题讨论】:

  • 将 $config['permitted_uri_chars'] 变量设置为 'a-z 0-9~%.:_\-\='
  • 嗨 Paresh,该配置存在同样的问题。还是谢谢。

标签: codeigniter


【解决方案1】:

$config['permitted_uri_chars'] 用作 PCRE 字符类模式。

最后一个字符是破折号,它会寻找破折号。但是,当破折号位于两个字符之间时,它会触发范围搜索。所以...当您在破折号后附加 +(加号)时,您会得到:

[_-+] // a range between underscore and plus in the ASCII table

您可能会想“那又怎样?以前通过 0-9 已经允许使用零”,您是对的,但这不是问题所在。问题是加号的 ASCII 数字小于下划线,并且范围不能向后工作,所以 _-+ 无效并触发 PCRE 编译失败,这反过来意味着整个检查失败,实际上不允许任何内容.

如果您启用了error_reporting 和/或查看错误日志,您会看到这一点。

如果您只将加号附加到默认模式,则不会发生这种情况 - 破折号不仅是最后一个字符,而且还使用反斜杠进行转义 - 因为您会这样做:

[_\-+] // Underscore, dash and plus sign as individual characters; not a range

我猜你认为这是一个允许并删除它的实际字符。只需将其添加回来:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2017-12-18
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多