我试图为这个问题找到一个解决方案,但都没有奏效。当我的REST api URI请求是,例如。https://serverip/meeting/userlist/0
我总是收到“您提交的URI包含不允许的字符”的错误消息。我甚至尝试在配置文件中将此参数保留为空:
$config‘’permitted_uri_chars‘= 'a-z 0-9~%.:_-+';
但是我得到了同样的错误。
不允许在URI末尾有一个0作为该段的唯一内容?因为我需要它来检索id = 0的用户。
非常感谢。
编辑-已解决:
又见面了,
最后我解决了这个问题。我发现很久以前我们在URI.php中注释了一个与UTF8编码相关的检查
如果(!空($str) &&!空($this->_permitted_uri_chars) &&!preg_match('/^'.$this->_permitted_uri_chars.'+$/i'.(UTF8_ENABLED?'u‘:''),$str))
我们只留下了第一个条件。我们有一些代码问题,在恢复该注释后似乎不会重现。现在,/0运行得很好。
所以很抱歉,最后这是一个与我们自己的修改有关的问题。
谢谢。
发布于 2017-05-23 17:35:48
$config['permitted_uri_chars']用作PCRE字符类模式。
其中的最后一个字符是破折号,它寻找破折号。但是,当破折号在两个字符之间时,它会触发范围搜索。所以..。当您在破折号后面附加+(加号)符号时,您会得到:
[_-+] // a range between underscore and plus in the ASCII table你可能会想“那又怎样?0之前通过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~%.:_\-+';https://stackoverflow.com/questions/44108649
复制相似问题