9

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

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

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

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

4

1 回答 1

18

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

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

并来自附录 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¶meters=2 #fake=2¶meters=3

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

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

笔记:

同样来自规范:

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

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

于 2009-02-19T17:47:56.540 回答