一、JavaScript escape() 函数 和 unescape() 函数
escape的加密解密
escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
在很多脚本语言的应用当中,escape函数是一个可转换编码的函数,比如javascript 的 ajax 中,向a.php传递参数?city=北京,可先将"北京"用escape重新编码,再进行传递,在服务器端接收后再解码才不会出现乱码。escape一般用于传递URL参数和类似urlencode base64_encode函数是类似的。如上?city=北京
定义和用法
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
语法
escape(string)
参数描述
string 必需。要被转义或编码的字符串。
返回值
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
提示和注释
提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。
注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。
实例
在本例中,我们将使用 escape() 来编码字符串:
<script type="text/javascript"> document.write(escape("Visit W3School!") + "<br />") document.write(escape("?!=()#%&")) </script>
输出:
Visit%20W3School%21
%3F%21%3D%28%29%23%25%26
unescape() 函数
定义和用法
unescape() 函数可对通过 escape() 编码的字符串进行解码。
语法
unescape(string)
参数描述
string 必需。要解码或反转义的字符串。
返回值
string 被解码后的一个副本。
说明
该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
提示和注释
注释:ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。
实例
在本例中,我们将使用 escape() 来编码字符串,然后使用 unescape() 对其解码:
<script type="text/javascript"> var test1="Visit W3School!" test1=escape(test1) document.write (test1 + "<br />") test1=unescape(test1) document.write(test1 + "<br />") </script>
输出:
Visit%20W3School%21
Visit W3School!
延伸阅读
在JavaScript中,有三套编码/解码的函数,分别是
escape / unescape
encodeURI / descodeURI
encodeURIComponent / decodeURIComponent
我们对字符串"<Hello+World>",用三种加密方式进行加密的结果如下
加密方式 | 加密结果 |
Escape | $3CHello+World%3E |
EncodeURI | $3CHello+World%3E |
EncodeURIComponent | $3CHello%2BWorld%3E |
我们发现三种加密方式近乎相同,不过实际上它们还是有少许区别的
escape不编码的字符有 69个
*、+、-、.、/、@、_、0~9、a~z、A~Z 而且escape对0~255以外的unicode值进行编码时输出%u****格式
encodeURI不编码的字符有 82个
!、#、$、&、‘、(、)、*、+、-、.、/、:、;、?、@、_、~、0~9、a~z、A~Z
encodeURIComponent不编码的字符有 71个
!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z
另外,我们可以编写一个函数来使escape可以对所有的字符进行编码,代码如下
var ExEscape = function (str) { var _a, _b; var _c = ""; for(var i = 0; i < str.length; i++){ _a = str.charCodeAt(i); _b = _a < 256 ? "%" : "%u"; // u不可以大写 _b = _a < 16 ? "%0" : _b; _c += _b + _a.toString(16).toUpperCase(); // 大小写皆可 } return _c; }
除了JavaScript提供的这三种加密/解密方法外,我们还需要了解HTMLEncode、URLEncode、JSEncode、UTF-7编码、Base64编码的相关知识