V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tianxiacangshen
V2EX  ›  PHP

thinkphp 路由正则死活匹配不到% #,为啥?

  •  
  •   tianxiacangshen · 2018-04-11 16:02:29 +08:00 · 2310 次点击
    这是一个创建于 2178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正则路由为:

    '/^username-([\s\S]*?)$/'=>'Index/index?username=:1',

    有些用户名里面有特殊字符比如#,我的目的是匹配所有的东西,结果遇到#就死掉了

    username-##### 就不行,跳转到了 Index/index 方法,但是获取 I('username)无效,%也不行

    高手们,这是为啥?有什么办法?
    12 条回复    2018-04-12 10:49:20 +08:00
    jfcherng
        1
    jfcherng  
       2018-04-11 16:19:51 +08:00   ❤️ 1
    "#" 在 URI 裡表示 fragment,在此之後的字符並不會從瀏覽器送到 server 端。
    而 "%" 本身在 URI 裡也有特殊意義,用於編碼非 ASCII 的字符。
    tianxiacangshen
        2
    tianxiacangshen  
    OP
       2018-04-11 16:26:41 +08:00
    @jfcherng 请问高手 如何解决这个问题?
    icy37785
        3
    icy37785  
       2018-04-11 16:27:44 +08:00
    解决方法是用户名不允许注册特殊字符呀。很多特殊字符都得编码后才能通过 get 传参,而编码这件事把,还得浏览器配合,坑挺多的,而正常情况下,没有编码的特殊字符都被掐了,你参数都没传过去,路由都是根据收到的参数来匹配正则的,参数就没有那段,当然是不行的。
    chairuosen
        4
    chairuosen  
       2018-04-11 16:33:58 +08:00
    url 里从来都是只拼 id 的,连拼英文名的都少。
    akira
        5
    akira  
       2018-04-11 16:37:37 +08:00
    用户名作为 post 参数上来,不要走 url
    azoon
        6
    azoon  
       2018-04-11 16:40:30 +08:00
    URL 改用 ID,话说用户名就不应该出现这些字符
    baiyi
        7
    baiyi  
       2018-04-11 17:12:03 +08:00 via Android
    urlencode ?
    xiaoyang7545
        8
    xiaoyang7545  
       2018-04-11 17:23:30 +08:00
    直接禁止特殊字符的注册。他要是用 /你的路由也会有问题。

    坑很多。
    msg7086
        9
    msg7086  
       2018-04-12 05:00:45 +08:00
    我就想说你数据往 URL 里填的时候竟然不编码?
    msg7086
        10
    msg7086  
       2018-04-12 05:02:10 +08:00
    如果有个人的名字叫 a#b%,那你的 URL 看起来应该是这样的:

    /username-a%23b%25

    如果不是……
    tianxiacangshen
        11
    tianxiacangshen  
    OP
       2018-04-12 08:50:06 +08:00
    @msg7086 编码也是一样的,路由也无法匹配到 %
    moonsola
        12
    moonsola  
       2018-04-12 10:49:20 +08:00
    如果必须用 get 传递用户名的话,先 base64 编码吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   953 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:37 · PVG 05:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.