一些在线文章说,在URL中没有querystring
和hash
的标准,但我们正在关注继续发生的事情。所以,我的问题是在同一个URL中同时具有查询字符串和散列的更好方法。
我认为问题是,如果hash跟在querystring之后,它可以成为某些查询字符串数据的值,如果querystring跟随hash,整个查询字符串可能变成hask。那么,我应该遵循什么样的顺序?
一些在线文章说,URL中的查询字符串和哈希没有标准
要么他们错了,要么你误解了他们。
查询字符串必须出现在片段标识符(您调用哈希)之前。
specification显示URI的格式:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
它清楚地显示了查询后出现的片段。
如果hash跟在querystring之后,它可以成为某些查询字符串数据的值
它不能。 #
是一个特殊字符,表示片段的开头。要在查询字符串数据中包含一个,它需要作为%23
进行转义。
这是我在JavaScript中尝试过的:
window.location="alpha#abc?def=34";
console.log(window.location);
结果是:
Location {
hash: "#abc?def=34",
search: "",
...otherData
}
然后:
window.location="alpha?abc=34#def";
console.log(window.location);
结果是:
Location {
hash: "#def",
search: "?abc=34",
...otherData
}
很明显,JavaScript在#符号之后没有区别,而hash之前的查询字符串工作正常。
所以,我们应该首先使用查询字符串然后使用哈希。