Php 链接中有%字符的Symfony2问题
我对symfony22.4的url中的%字符有点奇怪的问题 网址是: /测试/检查/dq9L1oAOh2dDRLn3wmFW6wyHRfgCjRF%2FCELMCWOPIYEULDO3LUJ8IN3LHFYZHZHCWWCQGWQFJ1APSAJUXAZ8E/ 路线是:Php 链接中有%字符的Symfony2问题,php,symfony,routing,Php,Symfony,Routing,我对symfony22.4的url中的%字符有点奇怪的问题 网址是: /测试/检查/dq9L1oAOh2dDRLn3wmFW6wyHRfgCjRF%2FCELMCWOPIYEULDO3LUJ8IN3LHFYZHZHCWWCQGWQFJ1APSAJUXAZ8E/ 路线是: test_check: pattern: /test/check/{id}/ defaults: { _controller: TestSiteBundle:Test:Check} 如果我从url中删除%
test_check:
pattern: /test/check/{id}/
defaults: { _controller: TestSiteBundle:Test:Check}
如果我从url中删除%字符,它将工作,如果我将其保留在url中,它将返回404
我还补充说:
requirements:
id: .+
但是,如果页面还包含GET参数,并且url为:
/测试/检查/dq9L1oAOh2dDRLn3wmFW6wyHRfgCjRF%2FCELMCWOPIYEULDO3LUJ8IN3LHFYZHZHCWWCQGWQFJ1APSAJUXAZ8E/?val=正确,测试=是
然后,id的值将为DQ9L1OAOH2DDRN3WMFW6WYHRFGCJRF%2FCELMCWOPIYULDO3DLUJ8IN3LHFYZHZHCWWCQGWQFJ1APSAJUXAZ8E/?val=true&test=yes
有没有最佳实践的想法
我知道我可以将param留在路由中,在/处分解字符串,并将好的字符串放在数组中,因为字符串是urlencoded的,所以不会生成第二个/但是如果有,我想应用一个更漂亮的解决方案
谢谢路由定义中的要求接受正则表达式。因此,我的建议是在路由定义中构建regexp过滤器,它比路由定义复杂一点+ 如果您希望最多有一个%2F/字符,那么您可以这样写您的匹配项:
requirements:
id: \w\/?\w*
我解决了这个问题,在它进入链接之前和在symfony中得到它之后,我替换了%但我仍然好奇是否有人知道更好的方法,我还测试了所有其他字符,没有一个导致这个问题