Las URI段为零(/ 0) - >错误DIsallowed字符

时间:2017-05-22 08:56:02

标签: codeigniter

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

我总是收到错误“你提交的URI已禁止使用字符”。我甚至试图将此参数保留在配置文件中:

$ config ['allowed_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。'] + $ /我(。(UTF8_ENABLED?'你':''),$ str))

我们只留下了第一个条件。在还原该评论后,我们遇到了一些似乎无法重现的代码问题。和/ 0现在工作正常。

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

感谢。

1 个答案:

答案 0 :(得分:0)

$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~%.:_\-+';