gpt4 book ai didi

javascript - encodeURIComponent() 与浏览器和 [ä ö å] 字符的区别

转载 作者:搜寻专家 更新时间:2023-11-01 04:24:54 25 4
gpt4 key购买 nike

我对 encodeURIComponent() 有疑问,因为它的行为似乎与浏览器不同(已使用 Chrome 和 Firefox 测试):

  • encodeURIComponent('ä') 返回 %C3%A4
  • escape('ä') 返回 %E4
  • Chrome/Firefox 将 x-www-form-urlencoded 形式的 ä 编码为 %E4

那么,为什么 encodeURIComponent 的行为与所有其他组件(主要是浏览器)不同?这实际上会导致问题,因为某些网站不理解我要向它们提供的内容。有问题的网站是http://verkkopalvelu.vrk.fi/Nimipalvelu/default.asp?L=1 (点击“Etunimihaku”,因为它是基于 iframe 的)。

encodeURIComponent 是否损坏,应该如何纠正这种情况?编码 ä ö å 等字符的正确方法是什么? escape() 似乎与那些浏览器编码相同,但 escape() 已被弃用。

我用 Fiddler 测试了浏览器,当我提交表单时,控制台/网络选项卡显示编码为 %E4。这里还有一个测试链接:A http://jsfiddle.net/tcyfktvg/1/

最佳答案

encodeURIComponent() 没有损坏。它使用 UTF-8 字符集对字符进行编码。总是。 (ECMAScript 3rd Edition (ECMA-262) 第 82 页)

escape() 使用 Unicode 进行编码(ECMAScript 1st Edition (ECMA-262) 第 60 页)。如果 unicode 代码 < 256,则使用简单的两个字母表示,如“ä”所示。如果 unicode 代码 >= 256,则使用带有前导“u”的扩展四字符表示。示例:escape("겧") == "%uACA7"

当 http 服务器接收到经过编码的 URL 时,就会出现问题。它必须对其进行解码。但是 URL 本身并不能说明使用了哪种编码来创建它。

这个 URL:http://server/%C3%A4 如果它是由 encodeURIComponent( )(使用 UTF-8),但它也可以是由 escape()(使用 Unicode)编码的 http://server/ä:

encodeUriComponent("ä") == "%C3%A4"
escape("ä") == "%C3%A4"

这取决于服务器的配置,它将使用哪种编码来解码 URL。因此,这是您问题的解决方案:知道 http 服务器期望哪种 URL 编码并选择适当的编码方法。

关于javascript - encodeURIComponent() 与浏览器和 [ä ö å] 字符的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27242977/

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