escape(), encodeURI(), encodeURIComponent() 是 JavaScript 中用于编码字符串的函数,它们的作用和使用场景略有不同。下面逐个解释它们的含义和区别:
- escape():
escape()函数用于对字符串进行编码,将字符串中的特殊字符转换成十六进制的转义序列(例如%20代表空格),以便在所有的计算机上都能正常显示。- 该方法已经被废弃,不推荐使用,因为它对非 ASCII 字符的处理不好,并且不安全,可能会导致 XSS 攻击。
- 示例:
var str = "This is a test!"; var encodedStr = escape(str); console.log(encodedStr); // "This%20is%20a%20test%21" - encodeURI():
encodeURI()函数用于对整个 URI 进行编码,它会将 URI 中的特殊字符(除了:/?#[]@!$&'()*+,;=之外的字符)进行编码,以便在 URL 中使用。- 通常用于对整个 URL 进行编码,而不是对单个 URI 组件进行编码。
- 示例:
var uri = "https://www.example.com/my page.html"; var encodedURI = encodeURI(uri); console.log(encodedURI); // "https://www.example.com/my%20page.html" - encodeURIComponent():
encodeURIComponent()函数用于对 URI 组件进行编码,它会对 URI 中的特殊字符(包括所有非字母数字字符)进行编码,以便在 URL 中使用。- 通常用于对 URI 中的特定组件(如查询字符串参数)进行编码。
- 示例:
var param = "key=value&name=John Doe"; var encodedParam = encodeURIComponent(param); console.log(encodedParam); // "key%3Dvalue%26name%3DJohn%20Doe"
区别:
escape()和encodeURI()已经被废弃,不推荐使用,因为它们对一些字符的处理不够严格,可能导致安全漏洞。encodeURIComponent()是最常用的字符串编码函数,它对所有非字母数字字符进行编码,包括对特殊字符的处理更加严格,通常用于对 URI 组件进行编码,例如查询字符串参数。