注意
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码
1. escape 和 unescape
1.1 escape() 函数可对字符串进行编码
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
document.write(escape("Visit W3School!") + "")document.write(escape("?!=()#%&"))//结果Visit%20W3School%21%3F%21%3D%28%29%23%25%26复制代码
注: ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它
1.2 unescape() 函数可对通过 escape() 编码的字符串进行解码
2. encodeURI 和 decodeURI
2.1 encodeURI() 函数可把字符串作为 URI 进行编码
不会被编码的字符:, / ? : @ & = + $ #
var uri="my test.php?name=ståle&car=saab";document.write(encodeURI(uri)+ "");//结果my%20test.php?name=st%C3%A5le&car=saab复制代码
2.2 decodeURI()
3. encodeURIComponent 和 decodeURIComponent
3.1 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )
此方法假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号
document.write(encodeURIComponent("http://www.w3school.com.cn"))document.write("")document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))document.write("")document.write(encodeURIComponent(",/?:@&=+$#"))//结果http%3A%2F%2Fwww.w3school.com.cnhttp%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F%2C%2F%3F%3A%40%26%3D%2B%24%23复制代码