URL,哈希或查询字符串中应该首先显示什么?

时间:2019-03-25 08:54:23

标签: javascript url hash query-string

一些在线文章说,URL中没有querystringhash的标准,但是我们正在跟踪持续发生的情况。因此,我的问题是在同一URL中同时具有querystring和hash的更好方法是什么。

我认为的问题是,如果哈希跟随查询字符串,它可以成为某些查询字符串数据的值,如果查询字符串跟随哈希,则整个查询字符串可能会变得很麻烦。那么,我应该遵循什么顺序?

2 个答案:

答案 0 :(得分:2)

  

一些在线文章说,URL中的查询字符串和哈希没有标准

它们是错误的,或者您是在误解它们。

查询字符串必须出现在片段标识符(您称为哈希)之前。

specification显示URI的格式:

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

它清楚地显示了查询之后出现的片段。

  

如果哈希值紧跟查询字符串,则它可以成为某些查询字符串数据的值

不能。 #是一个特殊字符,指示片段的开始。要在查询字符串数据中包含一个,需要将其转义为%23

答案 1 :(得分:0)

这是我在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不区分#符号后的任何内容,而哈希之前的querystring可以正常工作。

  

因此,我们应该先使用querystring,然后再使用散列。