URL Api:处理URL中的空白

时间:2018-07-31 16:37:01

标签: javascript url

在测试URL API时,我注意到在不同浏览器上对带有空格的URL的处理有所不同:

console.log(new URL('https://a b').host)

在Firefox中,它将引发错误:

TypeError: https://a b is not a valid URL.

但是在其他浏览器上,它将接受URL并显示a%20b。例如Brave,Opera和Chrome。

这些实现似乎同意路径名中的空格有效,并且它们会自动将它们引起来:

console.log(new URL('https://a/b c').pathname)

在我测试过的所有实现上打印/b%20c

问题:

  • 主机名和路径名中的空格是否正确?
  • 相同的逻辑是否也适用于其他空格字符(例如制表符)?
  • 这仅仅是Firefox中的错误,还是有更多的浏览器对空白有不同的解释?

更新:Chromium 70.0.3521.2开始拒绝它,而Chrome 69.0.3497.42仍然接受它。

3 个答案:

答案 0 :(得分:1)

您正在寻找encodeURI()

console.log(new URL(encodeURI('https://a b')).host);

有关更多详细信息,请参见MDN Docs on JavaScript's encodeURI()

答案 1 :(得分:1)

根据RFC 952,“名称中不允许使用空格或空格字符。” (指的是“网络,主机,网关或域名”)。我认为有关此问题的特定规则是最新的(截至2018年),因此Firefox正在强制执行此规则,而其他浏览器则更宽松。

另请参阅:https://stackoverflow.com/a/3523068

答案 2 :(得分:0)

如果您想看看RFC,您会发现URL中有限的字符完全有效,并且其中没有空格字符(制表符或空格)。

您看到的自动替换功能是浏览器上可以帮助用户的功能。