gpt4 book ai didi

javascript - 应该使用 encodeURI 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:04:42 24 4
gpt4 key购买 nike

javascript 的 encodeURI 函数是否有任何有效用途?

据我所知,当您尝试发出 HTTP 请求时,您应该:

  • 一个完整的 URI
  • 您想放入 URI 中的一些片段,可以是 unicode 字符串或 UTF-8 字节序列

在第一种情况下,显然不需要做任何事情来请求它。注意:如果你真的想将它作为参数传递(例如?url=http...),那么你实际上有一个恰好看起来像 URI 的第二种情况的实例。

在第二种情况下,您应该始终将 unicode 字符串转换为 UTF-8,然后在将其添加到 URI 之前调用 encodeURIComponent 转义所有字符。 (如果您有 UTF-8 字节序列而不是 unicode 字符串,则可以跳过转换为 utf8 的步骤)。

假设我没有遗漏任何东西,我看不到 encodeURI 的有效用法。如果你使用它,你很可能已经构建了一个无效的 URI,然后试图在事后“清理”它,这根本不可能,因为你不知道哪些字符是字面上的意思,哪些是打算转义的.

我看到很多反对使用 escape() 的建议,但没有看到任何人劝阻 encodeURI。我是否缺少有效用途?

最佳答案

我有一个 blog post它非常详细地回答了这个问题。

你应该永远不要使用encodeURI以编程方式构造一个URI,因为你说的原因——你应该总是对个人使用encodeURIComponent组件,然后将它们组合成一个完整的 URI。

根据 Postel's LawencodeURI 几乎 有用的地方在于“清理”一个 URI。 (“接受什么要自由,发送什么要保守。”)如果有人给你一个完整的 URI,它可能包含非法字符,例如空格、某些 ASCII 字符(例如双引号)和 Unicode 字符。 encodeURI 可用于将那些非法字符转换为合法的百分号转义序列,无需编码定界符。同样,decodeURI 可用于“美化”URI,将百分比转义序列显示为技术上非法的裸字符。

例如,网址:

http://example.com/admin/login?name=Helen Ødegård&gender=f

是非法的,但它仍然是完全明确的。 encodeURI 将其转换为有效的 URI:

http://example.com/admin/login?name=Helen%20%C3%98deg%C3%A5rd&gender=f

Web 浏览器是可能想要执行此类“URI 清理”的应用程序示例。当您在地址栏中键入 URL 时,它应该尝试将任何非法字符转换为百分号转义符,而不仅仅是出现错误。处理 URI 的软件(例如,想要获取页面超链接中所有 URL 的 HTML 抓取工具)可能也希望应用这种清理,以防任何 URL 在技术上是非法的。

不幸的是,encodeURI 有一个严重的缺陷,即它会转义“%”字符,这使得它对 URI 清理完全无用(它将对任何已经有百分比转义的 URI 进行双重转义) .因此我借了Mozilla's fixedEncodeURI函数并改进它,以便它正确地清理 URI:

function fixedEncodeURI(str) {
return encodeURI(str).replace(/%25/g, '%').replace(/%5B/g, '[').replace(/%5D/g, ']');
}

因此,您应该始终使用 encodeURIComponent 在内部构造 URI。你永远不应该使用 encodeURI,但你可以使用我的 fixedEncodeURI 来尝试“清理”从外部源(通常作为用户的一部分)提供的 URI界面)。

关于javascript - 应该使用 encodeURI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com