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

时间:2014-12-02 06:12:39

标签: 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。此处还有一个测试链接:A http://jsfiddle.net/tcyfktvg/1/

1 个答案:

答案 0 :(得分:3)

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本身并不能说明使用哪种编码来创建它。

此网址:http://server/%C3%A4如果http://server/äencodeURIComponent()编码(使用UTF-8),则可以是http://server/ä,但它也可以是由escape()编码的encodeUriComponent("ä") == "%C3%A4" escape("ä") == "%C3%A4" {1}}(使用Unicode):

function init() {
  $('#test').on('click', function() {
    $('.answer').animate({
      width: '1px',
      opacity: 0
    }, 2000, "swing");
  });
}

服务器的配置取决于它将用于解码URL的编码。所以这里是你的问题的解决方案:知道http服务器所期望的URL,并选择合适的编码方法。