我的正则表达式在执行foo/bar
和one with spaces/two with spaces/three with spaces/four with spaces
等操作时有效,但在PHP中使用urlencode
时会指向404页面。
以下测试显示编码的字符串在URL中不起作用: http://regex101.com/r/jP0gW1
有人有什么想法吗?使用“+”字符时也会中断。
答案 0 :(得分:0)
那是因为您没有处理正则表达式中的%
。 \w
仅匹配字母数字字符。
在正则表达式中添加%使其正常工作:
^([\w\ ]+)(?:/([\w\ ]+))?(?:/([\w\% ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?/?$
如果您愿意,可以简化正则表达式:
/^([\w\s%]+\/).*$/