擒纵机构()
不要使用它!escape()的定义见B.2.1.1节escape,附录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。
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
请注意,encodeURI与encodeURIComponent一样,不会转义'字符。
encodeURI组件()
如果要对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