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

ile*_*ile 5 javascript

我有一个问题,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我提交表单时的编码.这里还有一个测试链接:http://jsfiddle.net/tcyfktvg/1/

Edu*_*rch 3

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

\n\n

escape()使用 Unicode 进行编码(ECMAScript 第一版 (ECMA-262)第 60 页)。如果 unicode 代码小于 256,则使用简单的两个字母表示,如“\xc3\xa4”所示。如果 unicode 代码 >= 256,则使用带有前导“u”的扩展四字符表示形式。例子:escape("\xea\xb2\xa7") == "%uACA7"

\n\n

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

\n\n

此 URL:如果它是通过(使用 UTF-8)编码的,则http://server/%C3%A4可以是 a ,但它也可以是通过(使用 Unicode)编码的:http://server/\xc3\xa4encodeURIComponent()http://server/\xc3\x83\xc2\xa4escape()

\n\n
encodeUriComponent("\xc3\xa4") == "%C3%A4"\nescape("\xc3\x83\xc2\xa4") == "%C3%A4"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n