在JavaScript中,escape()
, encodeURI()
, 和 encodeURIComponent()
是用于编码URI(Uniform Resource Identifiers)的三个函数。下面分别介绍它们的用法和区别。
escape()
escape()
函数是用于对字符串进行编码,以便它们能够被用于URI中。这个函数已经被废弃,并且不应该在新代码中使用,因为它不能正确地处理所有的Unicode字符,并且已经被 encodeURI()
和 encodeURIComponent()
取代。
用法:
var encodedString = escape(string);
escape()
函数会转义除了字母、数字、@*-_
以及 +./
之外的所有字符。它使用%加上两位十六进制数来替换每个字符。
encodeURI()
encodeURI()
函数用于编码整个URI。它不会对以下字符进行编码:A-Z
, a-z
, 0-9
, -
, _
, .
, !
, ~
, *
, '
, (
, )
, ;
, :
, @
, &
, =
, +
, $
, ,
, /
, ?
, #
。
用法:
var encodedURI = encodeURI(uri);
例子:
var uri = "http://www.example.com/a b c?d=e&f=123#test";
var encodedURI = encodeURI(uri);
console.log(encodedURI); // "http://www.example.com/a%20b%20c?d=e&f=123#test"
encodeURIComponent()
encodeURIComponent()
函数用于编码URI组件,例如查询字符串参数、路径片段等。它不会对以下字符进行编码:A-Z
, a-z
, 0-9
, -
, _
, .
, !
, ~
, *
, '
, (
, )
。
用法:
var encodedURIComponent = encodeURIComponent(uriComponent);
例子:
var component = "a b c?d=e&f=123#test";
var encodedURIComponent = encodeURIComponent(component);
console.log(encodedURIComponent); // "a%20b%20c%3Fd%3De%26f%3D123%23test"
区别
escape()
已废弃,不推荐使用。encodeURI()
用于编码整个URI,不编码URI组件中的特殊字符,如:/?#[]@
等。encodeURIComponent()
用于编码URI组件,几乎对所有非ASCII字符和特殊字符进行编码,只保留少部分不被编码的字符。
总结来说,如果你需要编码整个URI,使用encodeURI()
;如果你需要编码URI中的某个组件(例如查询字符串),使用encodeURIComponent()
。而escape()
函数由于其局限性,已经被现代JavaScript开发所弃用。