我试图找到这个问题的解决方案,但没有任何效果。当我的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现在工作正常。
很抱歉,最后这是与我们自己修改有关的问题。
感谢。
答案 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~%.:_\-+';