Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript URL中有多个哈希符号_Javascript_Http_Url_Seo - Fatal编程技术网

Javascript URL中有多个哈希符号

Javascript URL中有多个哈希符号,javascript,http,url,seo,Javascript,Http,Url,Seo,或者你可以称之为“犀利”——符号 我遇到过一个例子,在那里#!和#在单个URL中同时使用。通过阅读其他文章,包括RFC,我无法理解这是否是一个合法的组合。当遇到这样的页面时,Mozilla浏览器(本例中是Iceweasel)会将URL显示为有2个,而Chrome只显示一个,但很快就会消失(包含页面的选项卡变得无响应并崩溃,但它可能没有连接) 现在,我的问题是,在一个URL中同时包含这两个URL是否合法,它是否合法且冗余(应该规范化),或者它只是Mozilla浏览器中的一个bug?因此,假设我正在

或者你可以称之为“犀利”——符号

我遇到过一个例子,在那里#!和#在单个URL中同时使用。通过阅读其他文章,包括RFC,我无法理解这是否是一个合法的组合。当遇到这样的页面时,Mozilla浏览器(本例中是Iceweasel)会将URL显示为有2个,而Chrome只显示一个,但很快就会消失(包含页面的选项卡变得无响应并崩溃,但它可能没有连接)

现在,我的问题是,在一个URL中同时包含这两个URL是否合法,它是否合法且冗余(应该规范化),或者它只是Mozilla浏览器中的一个bug?因此,假设我正在发出一个AJAX请求,或者尝试浏览浏览器历史-如果遇到这种情况,我应该怎么做

RFC-3986:,应该澄清一下。。。以防万一


还有:谷歌爬虫是如何看待事物的。

片段的格式只允许斜杠、问号和
pchar
s。如果查找RFC,您将看到哈希标记不是有效的
pchar

但是,浏览器会尽最大努力读取无效的URL,方法是将重复哈希当作转义处理,通过检查
window.location.hash
(在IE、Firefox和Chrome中)的

这是相同的
window.location.hash

http://www.example.com/hey#foo%23bar

正如@apsillers所提到的,它可能是合法的。但我会避免使用它,除非有必要,因为它可能会导致关于url的某种混乱

这种url:

http://www.example.com/hey#foo#bar

对我来说似乎真的很困惑,而且对普通用户和搜索引擎来说可能会更加困惑。

我的答案是明确的“不”,至少在提到这个问题时是这样。 但你必须看到的不仅仅是3.4

定义URI的结构,如下所示:

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment
(我只取了上面的部分,与URL相关)

因此,要回答您的问题,您必须查看所有部分:

  • 可能不包含哈希符号(仅
    ALPHA*(ALPHA/位/“+”/“-”/”
  • 可能不包含散列(我在这里不详细介绍),甚至“以下一个斜杠(“/”)、问号(“?”)或数字符号(“#”)终止”
  • '由一系列由斜线分隔的路径段组成 (“/”)字符。路径段依次只能由pchars组成,请参见,例如,此处没有散列!它还将“由第一个问号(“?”)或数字符号(“#”)或URI结尾”终止
  • 该部分(由第一个“?”表示)只能由pchar“/”或“?”组成,并将“由数字符号(“#”)字符或URI结尾终止”
因此,到目前为止,除了终止URI之外,不允许使用散列,如果希望使用至少一个散列,这不是我们想要的;-)

最后:

  • “由数字符号(#”)表示,也仅由pchar“/”或“?”组成。”。它“在URI的末尾终止”
总而言之: 兼容URL(或URI)中只允许一个“#”作为URL片段的标记。 特别是应该在路径中的散列签名(至少从外观上看,因为后面有斜杠)是有问题的,因为它们正式终止了路径部分


这可能会导致问题,例如,在单页应用程序中,由于哈希后的导航是在客户端而不是在服务器上完成的,因此使用了此选项。在这种情况下,SPA应该确保在接收时正确处理URL的其余部分,其中可能包括(特定于浏览器的)URL编码的查询和片段。

不,ABNF非常清楚,片段中不能有一个未被替换的“#”。啊,那么这只是一个浏览器强制验证的例子,通过将多个散列当作转义来处理。刚刚遇到这个问题,它可能是对您的答案的一个很好的补充:^的可能重复--标记为重复,优先于将人们引导到另一个问题,因为这里的答案并没有给出具体的允许字符列表和基本原理,而是发送了一个搜索什么是
pchar
     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment