转码方式

解码是前端比较常见的一种操作。

特殊符号是否编码

  1. escape: 不编码ASCII字母、数字、标点符号"@ * _ + - . /",对其他所有字符进行编码。
  2. encodeURI: 不编码ASCII字母、数字、标点符号"; / ? : @ & = + $ , #",对其他所有字符进行编码。
  3. encodeURIComponent: 对所有字符进行编码

转码结果

  1. escape: 输出字符的Unicode编码值
  2. encodeURI: 输出符号的utf-8形式,并且在每个字节前加上%
  3. encodeURIComponent: 输出符号的utf-8形式,并且在每个字节前加上%

tips:

  1. 但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。

注意点

为何解码最好解两次

例如笔者常用的解码方式

javascript 复制代码
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;
}
  1. 为什么捕抓异常: 其实decodeURIComponent是会有时候会爆异常的..这个属于bug
  2. 为什么要尝试两次编码、一次编码、和无编码: 因为防止服务端encode两次、一次、或者无编码
  3. 为什么要最后unescape,因为只有这个方法能解析Unicode编码
相关推荐
沐风。5621 分钟前
Object方法
开发语言·前端·javascript
JS_GGbond1 小时前
JavaScript入门学习路线图
开发语言·javascript·学习
BD_Marathon1 小时前
【JavaWeb】JS_JSON在客户端的使用
开发语言·javascript·json
仙人掌一号1 小时前
梳理SPA项目Router原理和运行机制 [共2500字-阅读时长10min]
前端·javascript·react.js
粥里有勺糖1 小时前
视野修炼-技术周刊第128期 | Bun 被收购
前端·javascript·github
用户12039112947262 小时前
彻底搞定大模型流式输出:从二进制碎块到“嘚嘚嘚”打字机效果,让底层逻辑飞起来
前端·javascript·面试
CPU NULL2 小时前
Vue 3 前端调试与开发指南
前端·javascript·vue.js
2401_860494702 小时前
React Native鸿蒙跨平台开发:error SyntaxError:Unterminated string constant.解决bug错误
javascript·react native·react.js·ecmascript·bug
十一.3663 小时前
83-84 包装类,字符串的方法
前端·javascript·vue.js
over6973 小时前
深入解析:基于 Vue 3 与 DeepSeek API 构建流式大模型聊天应用的完整实现
前端·javascript·面试