encodeURI()和decodeURI()
encodeURI用于编码URI,而decodeURI对应解码URI,encodeURI和decodeURI函数操作的是完整的URI,他不会编码URI中的任何保留字符。
encodeURIComponent()和decodeURIComponent()
encodeURIComponent和decodeURIComponent函数操作的是组成URI的个别组件,这俩函数假定任何保留字符都代表普通文本,所以必须编码他们,所以他们(保留字符)出现在一个完整URI中的组件里面时不会被
escape()和unescape()
escape()和unescape()用于字符串的编码和解码,该方法不会对ASCII字母和数字进行编码,也不会对下面的这些ASCII标点符号进行编码:*@-_+./。其他所有字符都会被转义序列替换。
escape和unescape方法不能用来对统一资源标示符(URI)进行编码和解码,对其编码/解码应使用encodeURI和decodeURI方法,或encodeURIComponent/decodeURLComponent方法。
escape/unescape方法已经被废弃,不推荐使用
encodeURI()和encodeURIComponent()的区别
encodeURI()和encodeURIComponent()两者都是用于编码URL,唯一区别就是编码的字符范围不同, encodeURI()方法不会对下列字符编码:
ASCII字母,数字,~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码:
ASCII字母,数字,~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。 举个例子
var str = 'http://'
encodeURIComponent(str);
// "http%3A%2F%2F"
encodeURI(str);
// http://
复制代码
上面的例子可以看出,encodeURIComponent方法会对://字符进行编码,但是encodeURI不会。
encodeURI解决URL传递时的中文问题
方法一
页面端发出的数据作一次encodeURI,服务器端进行转移成UTF-8;
方法二
页面端发出的数据作两次encodeURI
URI的组成形式
一个URI是由组件分隔符分割的组件序列组成,基本形式:
Scheme:First/Second;Third ? Fourth 其中斜体的名称代表组建。 “:”,"/";";","?"是当作分隔符的保留字符。
URI,URL,URN的区别
URI:Uniform Resource Identifier 统一资源标识符; URL:Uniform Resource Locator 统一资源定位符; URN:Uniform Resource Name 统一资源名称;
其中,URL,URN是URI的子集