逃脱()
不要使用它!
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
是不允许的。
编码URI()
当您需要工作 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 一样,不会对 ' 字符进行转义。
编码URI组件()
当您想对 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