代码之家  ›  专栏  ›  技术社区  ›  Paul W Homer

在URL锚点中,哪两个分隔符有效?

  •  9
  • Paul W Homer  · 技术社区  · 16 年前

    我在URL中使用锚点,允许人们在web应用程序中为“活动页面”添加书签。我使用锚点是因为它们很容易融入GWT历史机制。

    除了负值(如-1)会导致严重的解析问题之外,它是有效的,但现在我发现有两个分隔符会更好。此外,考虑到负数的问题,我想放弃使用“-”。

    URL锚点中还有哪些字符不会干扰URL或其GET参数?这些在未来会有多稳定?

    1 回复  |  直到 16 年前
        1
  •  18
  •   Daniel LeCheminant    13 年前

    看着 RFC for URLs, section 3.5 片段标识符(我相信你指的是)定义为

    fragment    = *( pchar / "/" / "?" )
    

    和从 Appendix A

    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                     / "*" / "+" / "," / ";" / "="
    

    有趣的是,规范还说

    “允许使用斜线(”/“)和问号(”?“)表示片段标识符中的数据。”

    所以看起来真正的锚,就像

    <a href="#name?a=1&b=2">
    ....
    <a name="name?a=1&b=2">
    

    应该是合法的,并且非常类似于正常的URL查询字符串。(快速检查验证了这些至少在chrome、firefox和ie中工作正常)既然这样做有效,我假设你可以使用你的方法来获得这样的URL

    http://www.site.com/foo.html?real=1&参数=2 #fake=2&参数=3

    没有问题(例如,片段中的“parameters”变量不应干扰查询字符串中的变量)

    注:

    同样从规范中:

    片段标识符组件由数字符号(“#”)字符表示,并在URI末尾终止

    因此,#后面的所有内容都是片段标识符,不应干扰GET参数。

    推荐文章