encodeURI 和 encodeURIComponent

文章类型:Javascript

发布者:hp

发布时间:2025-05-13

一:引言

encodeURI 和 encodeURIComponent 是 JavaScript 中用于对 URI(统一资源标识符)进行编码的两个方法,那么,他们有什么不同呢?

二:目的

(1)encodeURI

   定义:=>用于对整个 URI 进行编码,保留 URI 的合法结构(如协议、域名、路径等)

   场景:=>编码完整的 URL,但确保特殊符号(如 /, :, ?, # 等)不被转义

   范围:=>A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

(2)encodeURIComponent‌

  定义:=>用于对 URI 的组成部分(如查询参数、哈希值等)进行编码,确保这些部分不会破坏 URI 的结构

  场景:=>编码 URL 的片段(如参数值),转义所有可能干扰 URI 结构的字符

  范围:=>A-Z a-z 0-9 - _ . ! ~ * ' ( )

三:代码

1:encodeURI

encodeURI("http://example.com/测试?name=张三&age=20");
// 输出:http://example.com/%E6%B5%8B%E8%AF%95?name=%E5%BC%A0%E4%B8%89&age=20
// 保留协议、路径分隔符(/)和查询符号(?&)等。

2:encodeURIComponent

encodeURIComponent("name=张三&age=20");
// 输出:name%3D%E5%BC%A0%E4%B8%89%26age%3D20
// 转义了 `=` 为 `%3D`,`&` 为 `%26`。

四:区别

字符encodeURIencodeURIComponent
空格%20%20
‌/保留%2F
?保留%3F
‌:保留%3A
‌=保留%3D
&保留%26

五:使用

1:encodeURI=>需要保留 URL 的整体结构时

2:encodeURIComponent=>需要将动态值嵌入 URL 的某个部分(如查询参数)时

六:解码

1:encodeURI=>decodeURI

2:encodeURIComponent=>decodeURIComponent

七:总结

1:encodeURI‌:处理完整 URL,保留合法结构。

‌2:encodeURIComponent‌:处理 URL 片段(如参数),确保不破坏结构