【问题标题】:Regex URL breaking with certain characters正则表达式 URL 与某些字符中断
【发布时间】:2023-03-10 15:49:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: php regex url urlencode


    【解决方案1】:

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

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

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

    DEMO

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

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

    【讨论】:

    • 阿米特,他不能使用您建议的简化正则表达式/^([\w\s%]+\/).*$/,因为他需要将令牌捕获到各个组中以在他的替换网址中重复使用。
    • @zx81,我说“如果你愿意”
    • 这不是战斗或攻击。很抱歉,如果它遇到错误的方式。
    • @zx81,是的,它不是。 ;)
    • 再次抱歉,如果我的评论以任何方式冒犯了您。我喜欢你的工作。 :) 祝您周末愉快。
    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多