浏览器的编码常识

浏览器的编码常识

一、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编码的相关知识


未经允许请勿转载:程序喵 » 浏览器的编码常识

点  赞 (0) 打  赏
分享到: