URI编码与解码
# 1. URL 和 URI、URN 的区别
- URI:Uniform Resource Identifier -- 统一资源标识符。
- URL:Uniform Resource Locator -- 统一资源定位符。
- URN:Uniform Resource Name -- 统一资源名称。
- URL(指定位置的 URI) 和 URN(指定名称的 URI) 都是 URI(同时指定名称和位置的 URI) 的子集。
# 2. 介绍
统一资源标识符,或叫做 URI
, 是用来标识互联网上的资源(例如,网页或支付)和怎样访问这些资源的传输协议(例如,HTTP
和 FTP
)的字符串。除了 encodeURI
、encodeURIComponent
、decodeURI
、decodeURIComponent
四个字来编码和解码 URI
的函数之外 ECMAScript
语言自身不提供任何使用 URL
的支持。
# 3. 有何不同
encodeURI
、encodeURIComponent
:用来编码。decodeURI
、decodeURIComponent
:用来解码。encodeURI
和decodeURI
函数操作的是完整的 URI,这俩函数假定 URI 中的任何保留字符都有特殊意义,所有不会编码它们。encodeURIComponent
和decodeURIComponent
函数操作的是组成 URI 的个别组件,这俩函数假定任何保留字符都代表普通文本,所以必须编码它们,所以它们(保留字符)出现在一个完整 URI 的组件里面时不会被解释成保留字符了。encodeURI
和encodeURIComponent
:唯一区别就是编码的字符范围,其中encodeURI
方法不会对下列字符编码 -- ASCII字母,数字,~!@#$&()=:/,;?+' ,encodeURIComponent
方法不会对下列字符编码 -- ASCII字母,数字,~!()',所以encodeURIComponent
比encodeURI
编码的范围更大。实际例子来说:encodeURIComponent
会把 http:// 编码成 http%3A%2F%2F,而encodeURI
却不会。
# 4. 举例
- 如果你需要编码整个 URL,然后需要使用这个URL,那么用
encodeURI
。 - 当你需要编码 URL 中的参数的时候,那么
encodeURIComponent
是最好方法。