encodeURI
是 JavaScript 中的一个函数,用于对统一资源标识符 (URI) 进行编码,以便发送到网络。这个函数不会对 ASCII 字母和数字以及一些特殊字符(如 -_.!~*'()
)进行编码,但会对其他字符,包括中文字符进行编码。
URI 编码(也称为百分号编码)是一种用于在 URI 中表示非 ASCII 字符的编码机制。在这种编码中,每个非 ASCII 字符被替换为一个百分号 %
后跟两个表示该字符 ASCII 码的十六进制数字。
encodeURI
编码后的 URI 可以被所有现代浏览器正确解析。encodeURI
主要用于编码整个 URI,而不是单个参数。如果需要编码 URI 中的查询参数部分,应使用 encodeURIComponent
函数。
应用场景包括但不限于:
let url = "https://example.com/搜索?q=中文";
let encodedUrl = encodeURI(url);
console.log(encodedUrl); // 输出: https://example.com/%E6%90%9C%E7%B4%A2?q=%E4%B8%AD%E6%96%87
encodeURI
不会编码某些特殊字符?原因:encodeURI
的设计初衷是为了编码整个 URI,而不是单个参数。因此,它故意保留了一些特殊字符,如 :
、/
、?
和 #
,因为这些字符在 URI 中有特定的语法意义。
解决方法:如果需要对 URI 中的参数部分进行编码,应使用 encodeURIComponent
函数。
let param = "中文";
let encodedParam = encodeURIComponent(param);
console.log(encodedParam); // 输出: %E4%B8%AD%E6%96%87
解决方法:如果需要在服务器端解码这些特殊字符,可以使用相应的解码函数,如 JavaScript 中的 decodeURI
或 decodeURIComponent
。
let decodedUrl = decodeURI(encodedUrl);
console.log(decodedUrl); // 输出: https://example.com/搜索?q=中文
总之,encodeURI
是一个非常有用的函数,用于确保 URI 在网络传输中的正确性和安全性。了解其工作原理和适用场景,可以帮助开发者更有效地处理 URI 相关的任务。
领取专属 10元无门槛券
手把手带您无忧上云