查看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 参数。