一文详解JavaScript的转码方式

作者:代码拾荒

时间:2026-10-30

浏览:172

本文详细解析JavaScript中escape、encodeURI和encodeURIComponent三种转码函数的区别,涵盖不编码字符范围及输出格式。重点讲解表单空格转+号的机制,以及通过双重decodeURIComponent结合unescape的稳健解码策略,解决服务端编码不一致导致的异常问题。

文章目录

解码是前端开发中较为常见的操作之一。

特殊符号是否编码

  • escape函数不编码ASCII字母、数字以及标点符号"@ * _ + - . /",对其余所有字符进行编码处理。
  • encodeURI函数不编码ASCII字母、数字以及标点符号"; / ? : @ & = + $ , #",对其余所有字符进行编码。
  • encodeURIComponent函数则对所有字符进行编码。

转码结果

  • escape的输出结果为字符的Unicode编码值。
  • encodeURI的输出结果为符号的UTF-8形式,并在每个字节前添加%符号。
  • encodeURIComponent的输出结果同样为符号的UTF-8形式,并在每个字节前添加%符号。

注意事项:

  • 需要注意的是,网页在提交表单时,空格会被转换为+字符。服务器在处理数据时,会将+号还原为空格。

注意点

为何解码最好解两次

例如笔者常用的解码方式

function decode(str) {
    var r = '';
    try {
        r = decodeURIComponent(decodeURIComponent(str));   
    }catch(e){
        try {
            r = decodeURIComponent(str);
        } catch(e) {
            try {
                r = unescape(str); //Unicode
            }catch(e) {
                r = str;
            }
        }
    }
    return r;
}
  • 为何捕获异常:实际上decodeURIComponent有时会抛出异常,这属于其固有行为。
  • 为何尝试两次编码、一次编码和无编码:这是为了兼容服务端可能进行两次编码、一次编码或无编码的情况。
  • 为何最后使用unescape:因为只有该方法能够解析Unicode编码。

到此这篇关于一文详解JavaScript的转码方式的文章就介绍到这了,更多相关JavaScript转码方式内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章