URI
URI(统一资源标识符)是一个用于标志某一互联网资源名称的字符串。
与 URL 和 URN 的关系
URL(统一资源定位符)和 URN(统一资源名称)属于 URI 的子集,URI 可以为 URL、URN 两者之一或同时是 URI 和 URN。URN 描述资源的名称,URL 描述资源的地址,而 URI 描述资源的 id。URI 可以是一个资源的 URL(地址)、或 URN(名称)。
例如,ISBN 0-486-27557-4 标志出了一个 ISBN 系统中的图书《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,需要它的位置,也就是一个 URL 地址,例如 file:///home/username/RomeoAndJuliet.pdf,该 URL 标志出了存储于本地硬盘中的电子书文件。因此,URL 和 URN 有着互补的关系。
编码和解码
一般来说,URL 只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。这意味着,如果 URL 中有汉字,就必须编码后使用。
escape() 已废弃
将字符串(除了 ASCII 字符集(字母、数字、标点符号和 @*_+-./))转义成十六进制形式(Unicode 编码值)并返回。当值小于等于 0xFF 时,用一个 2 位转义序列: %xx 表示。大于 0xFF 则使用 4 位序列:%uxxxx 表示。
| 1 | escape("abc123"); // "abc123" | 
注意,escape() 不对
+号编码,而网页在提交表单的时候,如果有空格,则会被转化为+号。服务器处理数据的时候,也会把+号处理成空格。所以,使用的时候要小心。
unescape() 已废弃
将十六进制形式字符串(除了 ASCII 字符集(字母、数字、标点符号和 @*_+-./)的的十六进制形式)解码并返回。
| 1 | unescape('abc123'); // "abc123" | 
encodeURI()
将字符串(除了 A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #)转义成 utf-8 形式,并且在每个字节前加上 %。
| 1 | encodeURI("my test.asp?name=ståle&msg=你好"); // my%20test.asp?name=st%C3%A5le&msg=%E4%BD%A0%E5%A5%BD | 
decodeURI()
解码 utf-8 形式的字符串(除了 A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # 的十六进制形式)并返回。
| 1 | decodeURI('my%20test.asp?name=st%C3%A5le&msg=%E4%BD%A0%E5%A5%BD'); // my test.asp?name=ståle&msg=你好 | 
encodeURIComponent()
将字符串(除了 A-Z a-z 0-9 - _ . ! ~ * ' ( ))转义成 utf-8 形式,并且在每个字节前加上 %。与 encodeURI() 的区别是,它用于对 URL 的组成部分进行个别编码,而不用于对整个 URL 进行编码。,比 encodeURI() 多转义了 ; , / ? : @ & = + $ # 11 种字符。
| 1 | encodeURIComponent("https://w3schools.com/my test.asp?name=ståle&msg=你好"); // https%3A%2F%2Fw3schools.com%2Fmy%20test.asp?name=st%C3%A5le&msg=%E4%BD%A0%E5%A5%BD | 
注意,如果对 URL 路径前的字符进行转义,URL 将不能访问。
decodeURIComponent()
解码 utf-8 形式的字符串(除了 A-Z a-z 0-9 - _ . ! ~ * ' ( ) 的十六进制形式)并返回。
| 1 | decodeURIComponent('https%3A%2F%2Fw3schools.com%2Fmy%20test.asp?name=st%C3%A5le&msg=%E4%BD%A0%E5%A5%BD'); // https://w3schools.com/my test.asp?name=ståle&msg=你好 |