转码方式

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

特殊符号是否编码

  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编码
相关推荐
重铸码农荣光7 分钟前
深入理解 JavaScript 原型链:从 Promise.all 到动态原型的实战探索
前端·javascript·promise
进击的野人12 分钟前
深入理解 Async/Await:现代 JavaScript 异步编程的优雅解决方案
javascript·面试·ecmascript 6
PineappleCoder18 分钟前
pnpm 凭啥吊打 npm/Yarn?前端包管理的 “硬链接魔法”,破解三大痛点
前端·javascript·前端工程化
CoolerWu1 小时前
TRAE SOLO实战成功展示&总结:一个所见即所得的笔记软体
前端·javascript
北极糊的狐1 小时前
Vue3 子组件修改父组件传递的对象并同步的方法汇总
前端·javascript·vue.js
Zyx20071 小时前
JavaScript 作用域与闭包(下):闭包如何让变量“长生不老”
javascript
u***j3241 小时前
JavaScript在Node.js中的进程管理
开发语言·javascript·node.js
用户47949283569151 小时前
javascript新进展你关注了吗:TC39 东京会议带来五大新特性
javascript
北极糊的狐3 小时前
父组件向子组件传参时,传递数组和对象类型的参数的方法
前端·javascript·vue.js
一颗不甘坠落的流星3 小时前
【HTML】iframe 标签 allow 权限汇总(例如添加复制粘贴权限)
前端·javascript·html