【问题标题】:What two separator characters would work in a URL anchor?哪两个分隔符可以在 URL 锚点中使用?
【发布时间】:2010-10-08 15:40:15
【问题描述】:

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

我现有的实现将导航和数据信息编码到锚点中,由“-”字符分隔。 IE。创建锚点,如#location-location-key-value-key-value

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

还有哪些其他字符可以在不会干扰 URL 或其 GET 参数的 URL 锚点中起作用?这些在未来会有多稳定?

【问题讨论】:

    标签: http url parsing anchor


    【解决方案1】:

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

    片段 = *( pchar / "/" / "?" )

    来自Appendix A

    pchar = unreserved / pct-encoded / sub-delims / ":" / "@" 未保留 = ALPHA / DIGIT / "-" / "." /“_”/“~” 子分隔符=“!” / "$" / "&" / "'" / "(" / ")" /“*”/“+”/“,”/“;” /“=”

    有趣的是,规范中还提到

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

    看来,真正的主播,比如

    <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&parameters=2#fake=2&parameters=3

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

    您还可以在必要时使用百分比编码...并且在子分隔符中定义了许多其他可用的字符。

    注意:

    同样来自规范:

    “片段标识符组件由数字符号 (“#”) 字符的存在指示,并以 URI 结尾终止。”

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

    【讨论】:

    • 您的第一个示例不会被解释为“名称”的锚点以及两个参数 a 和 b 吗?第二个例子合法吗?
    • @Paul:不,因为根据规范,url 中 # 之后的所有内容都被认为是片段标识符。正常的 URL 参数必须在 # 之前进行编码
    • 那么machine.domain.com:8232/… 应该可以吗?哎呀,那些讨厌的破折号好多了:-)
    • @Paul:它应该可以工作(从我的机器上可以看出,它确实有效)
    • 谢谢丹尼尔,我将编辑我的代码,所以我会在几天(工作日)内更新它。我喜欢使用 '&' 和 '=' 作为 seps 的想法。
    猜你喜欢
    • 2023-03-13
    • 2011-12-06
    • 2011-08-04
    • 2019-04-10
    • 2015-01-01
    • 2012-08-24
    • 1970-01-01
    • 2011-02-28
    • 2014-04-05
    相关资源
    最近更新 更多