我有以下路线
$r->get('/select_folder/:mail')->to('mail#change_folder');
它几乎每次都能很好地工作,但是当路由包含 %2f 字符序列时,相当于/它就像 %2f 是路径分隔符而不是转义序列一样。
这是一个示例输入:
http://127.0.0.1:5000/select_folder/%5bGmail%5d%2fDestacados
这是错误的一部分:
这些路由都无法为您的 GET 请求生成响应/select_folder/[Gmail]/Destacados,也许您需要添加一个新路由?
我想知道某种方法可以在不使用 GET 或 POST 参数的情况下将这样的参数作为 url 部分获取。
可以使用通配符占位符来允许/
成为匹配参数的一部分。
$r->get('/select_folder/*mail')->to('mail#change_folder');
%2F 被解释为/
的原因是 URL 在应用于路由之前已解码。
我发现了如何使用正则表达式来解决问题。
$r->get('/select_folder/:folder'=>[folder=>qr/.*/])->to('mail#change_folder');
我使:文件夹匹配任何字符,现在它正在工作。