正则表达式URL打破某些字符

时间:2014-04-19 05:30:52

标签: php regex url urlencode

我的正则表达式在执行foo/barone with spaces/two with spaces/three with spaces/four with spaces等操作时有效,但在PHP中使用urlencode时会指向404页面。

以下测试显示编码的字符串在URL中不起作用: http://regex101.com/r/jP0gW1

有人有什么想法吗?使用“+”字符时也会中断。

1 个答案:

答案 0 :(得分:0)

那是因为您没有处理正则表达式中的%\w仅匹配字母数字字符。

在正则表达式中添加%使其正常工作:

^([\w\ ]+)(?:/([\w\ ]+))?(?:/([\w\% ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?/?$

DEMO

如果您愿意,可以简化正则表达式:

/^([\w\s%]+\/).*$/