代码之家  ›  专栏  ›  技术社区  ›  Philipp Claßen

URL API:处理URL中的空格

  •  1
  • Philipp Claßen  · 技术社区  · 7 年前

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

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

    在Firefox中,它会抛出一个错误:

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

    但在其他浏览器上,它将接受URL并打印 a%20b . 例如,勇敢、歌剧和铬合金。

    这些实现似乎同意路径名中的空格是有效的,它们将自动引用它们:

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

    印刷品 /b%20c 在我测试的所有实现上。

    问题:

    • 主机名和路径名中的空格是否有效?
    • 同样的逻辑是否也适用于其他类似空格的字符(例如制表符)?
    • 这仅仅是火狐的一个缺陷,还是有更多的浏览器可以用不同的方式解释空白?

    更新: 铬70.0.3521.2开始拒收,而铬69.0.3497.42仍然接受。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Steve    7 年前

    根据 RFC 952 “不允许空白或空格字符作为名称的一部分。”(指“网络、主机、网关或域名”)。我相信这方面的具体规则是最新的(截至2018年),所以看起来火狐正在强制执行这一规则,而其他浏览器则更为宽松。

    还可以看到: https://stackoverflow.com/a/3523068

        2
  •  1
  •   Chayim Friedman    7 年前

    你在找 encodeURI() :

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

    有关详细信息,请参阅 MDN Docs on JavaScript's encodeURI() .

        3
  •  0
  •   Paul    7 年前

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

    你看到的自动替换是一个帮助用户的浏览器功能。

    推荐文章