你什么时候应该使用escape来代替encodeURI / encodeURIComponent?

编码发送到Web服务器的查询字符串时 - 何时使用escape()以及何时使用encodeURI()encodeURIComponent()

使用转义:

escape("% +&=");

要么

使用encodeURI()/ encodeURIComponent()

encodeURI("http://www.google.com?var1=value1&var2=value2");

encodeURIComponent("var1=value1&var2=value2");

逃逸()

特殊字符的编码除以下外:@ * _ + - 。/

字符的十六进制形式(代码单元值为0xFF或更小)是一个两位数字的转义序列:%xx。 对于代码单元较大的字符,使用四位数格式%uxxxx。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape

是encodeURI()

当你想要一个工作URL时使用encodeURI。 拨打此电话:

encodeURI("http://www.example.org/a file with spaces.html")

要得到:

http://www.example.org/a%20file%20with%20spaces.html

不要调用encodeURIComponent,因为它会销毁URL并返回

http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html

encodeURIComponent方法()

如果要编码URL参数的值,请使用encodeURIComponent。

var p1 = encodeURIComponent("http://example.org/?a=12&b=55")

然后你可以创建你需要的URL:

var url = "http://example.net/?param1=" + p1 + "&param2=99";

你会得到这个完整的URL:

http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55&param2=99

请注意,encodeURIComponent不会转义'字符。 一个常见的错误是使用它来创建html属性,如href='MyUrl' ,它可能遭受注入漏洞。 如果您是从字符串构建html,请使用"替代'作为属性引用,或者添加额外的编码层( '可以编码为%27)。

有关此类编码的更多信息,可以查看:http://en.wikipedia.org/wiki/Percent-encoding


encodeURI()encodeURIComponent()之间的区别恰恰是由encodeURIComponent编码的11个字符,而不是encodeURI编码的:

表与encodeURI和encodeURIComponent之间的十个区别

我用谷歌浏览器中的console.table轻松生成了这张表格:

var arr = [];
for(var i=0;i<256;i++) {
  var char=String.fromCharCode(i);
  if(encodeURI(char)!==encodeURIComponent(char)) {
    arr.push({
      character:char,
      encodeURI:encodeURI(char),
      encodeURIComponent:encodeURIComponent(char)
    });
  }
}
console.table(arr);

我发现这篇文章启发:Javascript疯狂:查询字符串解析

当我试图解释为什么decodeURIComponent不能正确解码'+'时,我发现它。 这里是一个摘录:

String:                         "A + B"
Expected Query String Encoding: "A+%2B+B"
escape("A + B") =               "A%20+%20B"     Wrong!
encodeURI("A + B") =            "A%20+%20B"     Wrong!
encodeURIComponent("A + B") =   "A%20%2B%20B"   Acceptable, but strange

Encoded String:                 "A+%2B+B"
Expected Decoding:              "A + B"
unescape("A+%2B+B") =           "A+++B"       Wrong!
decodeURI("A+%2B+B") =          "A+++B"       Wrong!
decodeURIComponent("A+%2B+B") = "A+++B"       Wrong!
链接地址: http://www.djcxy.com/p/4503.html

上一篇: When are you supposed to use escape instead of encodeURI / encodeURIComponent?

下一篇: How to disable autocomplete for all major browsers