在测试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
。
问题:
更新:Chromium 70.0.3521.2开始拒绝它,而Chrome 69.0.3497.42仍然接受它。
答案 0 :(得分:1)
您正在寻找encodeURI()
:
console.log(new URL(encodeURI('https://a b')).host);
有关更多详细信息,请参见MDN Docs on JavaScript's encodeURI()
。
答案 1 :(得分:1)
根据RFC 952,“名称中不允许使用空格或空格字符。” (指的是“网络,主机,网关或域名”)。我认为有关此问题的特定规则是最新的(截至2018年),因此Firefox正在强制执行此规则,而其他浏览器则更宽松。
答案 2 :(得分:0)
如果您想看看RFC,您会发现URL中有限的字符完全有效,并且其中没有空格字符(制表符或空格)。
您看到的自动替换功能是浏览器上可以帮助用户的功能。