编码要发送到Web服务器的查询字符串时 - 何时使用escape()
以及何时使用encodeURI()
或encodeURIComponent()
:
使用转义:
escape("% +&=");
要么
使用encodeURI()/ encodeURIComponent()
encodeURI("http://www.google.com?var1=value1&var2=value2"); encodeURIComponent("var1=value1&var2=value2");
Arne Evertss.. 1891
逃逸()
不要用它!
escape()
在B.2.1.2节中规定了逃逸,附件B的引言文字说:
...本附录中指定的所有语言功能和行为都具有一个或多个不良特征,并且在没有遗留用法的情况下将从本规范中删除.......
编写新的ECMAScript代码时,程序员不应使用或假设存在这些特性和行为....
行为:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
特殊字符编码,但以下情况除外:@*_ + - ./
字符的十六进制形式,其代码单元值为0xFF或更小,是一个两位数的转义序列:%xx
.
对于具有更大代码单元的字符,%uxxxx
使用四位数格式.在查询字符串中不允许这样做(在RFC3986中定义):
query = *( pchar / "/" / "?" ) pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
仅当百分号直接后跟两个十六进制数字时才允许百分号,u
不允许使用百分号.
如果需要工作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.htmlencodeURIComponent方法()
如果要对URL参数的值进行编码,请使用encodeURIComponent.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
然后,您可以创建所需的URL:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
您将获得这个完整的URL:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
请注意,encodeURIComponent不会转义该'
字符.一个常见的错误是使用它来创建html属性,例如href='MyUrl'
,这可能会遭受注入错误.如果要从字符串构造html,请使用"
而不是使用'
属性引号,或者添加额外的编码层('
可以编码为%27).
有关此类编码的更多信息,请查看:http://en.wikipedia.org/wiki/Percent-encoding
不要用它!
escape()
在B.2.1.2节中规定了逃逸,附件B的引言文字说:
...本附录中指定的所有语言功能和行为都具有一个或多个不良特征,并且在没有遗留用法的情况下将从本规范中删除.......
编写新的ECMAScript代码时,程序员不应使用或假设存在这些特性和行为....
行为:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
特殊字符编码,但以下情况除外:@*_ + - ./
字符的十六进制形式,其代码单元值为0xFF或更小,是一个两位数的转义序列:%xx
.
对于具有更大代码单元的字符,%uxxxx
使用四位数格式.在查询字符串中不允许这样做(在RFC3986中定义):
query = *( pchar / "/" / "?" ) pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
仅当百分号直接后跟两个十六进制数字时才允许百分号,u
不允许使用百分号.
如果需要工作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.htmlencodeURIComponent方法()
如果要对URL参数的值进行编码,请使用encodeURIComponent.
var p1 = encodeURIComponent("http://example.org/?a=12&b=55")
然后,您可以创建所需的URL:
var url = "http://example.net/?param1=" + p1 + "¶m2=99";
您将获得这个完整的URL:
http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55¶m2=99
请注意,encodeURIComponent不会转义该'
字符.一个常见的错误是使用它来创建html属性,例如href='MyUrl'
,这可能会遭受注入错误.如果要从字符串构造html,请使用"
而不是使用'
属性引号,或者添加额外的编码层('
可以编码为%27).
有关此类编码的更多信息,请查看:http://en.wikipedia.org/wiki/Percent-encoding