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