【问题描述】:

笔者遇到过这样一个需求,在http的拦截器中拦截url并添加一些额外的参数,代码如下:

// http request 拦截器
// instance: axios实例
this.instance.interceptors.request.use(config => {const authParams: any = LocalStorage.get(STORAGE_KEY.IFRAME_PARAMS)// 替换url,替换参数const {url, baseURL, params} = configlet [pathname, search] = url.split('?')const temp = search ? this.parseParams(search) : {}Object.assign(temp, authParams)          // 覆盖原请求中的部分参数const newParams = this.getQueryString(temp)config.url = newParams ? `${pathname}?${newParams}` : pathname        // 使用?拼接成新的urlreturn config},err => {return Promise.reject(err)})/*** @desc 解析跳转进来的路由参数,为对象* '?type=1&iframe=true'* =>* {type: "1"iframe: "true"}*/parseParams(search) {const ret = {},seg = search.replace(/^\?/, '').split('&'),len = seg.lengthlet i = 0, sfor (; i < len; i++) {if (!seg[i]) {continue}s = seg[i].split('=')ret[s[0]] = s[1]}return ret}

比如拦截http请求(1):
https://xxx.com/report/list?title=customer_number&endTime=2020-06-30%2023:59:59&startTime=2020-06-01%2000:00:00&pageSize=20&currentPageNo=1
添加参数后变成请求(2):
https://xxx.com/report/list?timestamp=1595314770&sign=9bc3fd371169e2b4fb6184ed081b0817&currentPageNo=1&pageSize=20&startTime=2020-06-01%252000:00:00&endTime=2020-06-30%252023:59:59&title=customer_number
对比可知添加了参数:

// B
{timestamp: 1595314770,sign:9bc3fd371169e2b4fb6184ed081b0817
}

我的做法是解析成元url中?后面的参数成object(A),然后把新的参数(B)拼接到A上,再更新新的url的参数,看似逻辑木得问题,但是!发请求的时候就是失败,并且报错:参数[startTime]格式错误,咦,笔者都没有操作startTime啊,怎么会参数错误呢?

【错因查找】:

笔者瞪大着高度近视的小眼睛,观察了半天才发现,原来两个url中的startTime参数真的不一样,
请求(1)中startTime:startTime=2020-06-01%2000:00:00
请求(2)中startTime:startTime=2020-06-01%252000:00:00
额,笔者当时上传的参数未:startTime=2020-06-01 00:00:00,明明是空格(space),肿么变成了%20,又变成了%25呢?原来是特殊字符的锅。。。

由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。
较为特殊的字符例如:@&=+$,/?%!*’();:#[]

当客户端发请求时,浏览器会自动对含有这些字符的部分进行处理,根据

常用ASCII URL编码对照表,JavaScript中如何把url的%20、%22、%28、%29、%7B、%7D解析还原成真实的字符相关推荐

  1. url中的20%、22%、26%、7B%、%7D、28%、29%怎么解析还原成真实的字符

    URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5   tab 9% B 42% b 62% « %AB Ö %D6   linefeed %0A C 43% c ...

  2. url编码 android,Android中的URL编码

    您如何在Android中编码URL ? 我以为是这样的: final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8&qu ...

  3. 火狐浏览器设置url编码_关于不同浏览器对URL编码的分析(转)

    转自:http://wdp107.iteye.com/blog/608786 先来看看三个url: url1. http://hi.baidu.com/爱宝的妍 url2. http://hi.bai ...

  4. php 文字 url编码,如何实现php中文转url编码

    如何实现php中文转url编码 发布时间:2020-08-07 10:10:03 来源:亿速云 阅读:65 作者:Leah 如何实现php中文转url编码?相信很多没有经验的人对此束手无策,为此本文总 ...

  5. 常用ASCII码详细对照表 (0—255)

    第0-32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行).CR(回车).FF(换页).DEL(删除).BEL(振铃)等:通讯专用字符:SOH(文头).EOT(文尾).ACK ...

  6. URL中的20%、22%、26%、7B%、%7D、28%、29%解析成真实的字符

    https://blog.csdn.net/superit401/article/details/78052965

  7. php html url编码,html中url编码是什么?有什么用?

    本篇文章给大家带来的内容是介绍HTML中的URL编码是什么,有什么用.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 我们在介绍URL编码之前,首先来了解一下URL是什么,URL的相 ...

  8. JS javascript实现url编码和url解码(urlEncode urlDecode)

    本文转自:JS javascript实现url编码和url解码(urlEncode urlDecode)  转载请保留. 表单通过get方式提交中文数据时,提交的中文会被转化为类似"%CC% ...

  9. 网络传输中的那些编码之-URL编码

    由于URL编码的一些混乱情况,曾经困扰着无数的程序员,本文将捋一捋URL编码相关的一些知识点,希望看望之后能给人恍然大悟的感觉. 本文将从如下几个方面进行介绍: 什么是URL编码 为什么进行URL编码 ...

最新文章

  1. SAP QM 检验批上留样记录如何看?
  2. LIME:一种解释机器学习模型的方法
  3. SpringBootController控制层接收参数的几种常用方式
  4. mac 怎么创建php文件夹权限设置密码,Mac文件权限管理(shell命令)
  5. 牛客网(剑指offer) 第四题 重建二叉树
  6. I Got a Matrix!
  7. [js] 在设置keyup监听事件后按F5刷新和按浏览器中刷新键刷新有什么区别?
  8. MaxCompute 多租户数据安全体系
  9. excel两个表格数据对比_两个Excel表格合并,最有水平的处理方法
  10. 05 搭建4节点hadoop集群
  11. kill、killall 、pkill 发送信号命令
  12. 苹果sf字体_字体基础知识
  13. [附源码]计算机毕业设计JAVAjsp宾馆客房管理系统
  14. vs未能加载项目文件。未能找到路径 c#笔记5
  15. HTML+CSS+JS实现 ❤️ 立方体旋转图片切换特效❤️
  16. python+ opencv实现摄像头实时人脸识别并实现汉字标框
  17. SSH介绍与神器Tabby
  18. BAT批量替换文件内容
  19. 免费开源的商城系统!可商用!推荐给你
  20. java头像选择系统_安卓Java源程序 带选择头像功能的用户注册 使用Intent回传数据...

热门文章

  1. 做到这一点,你也可以成为优秀的程序员(转)
  2. 如何用电脑画平面坐标图_在Word中如何画坐标图?
  3. 两次腾讯面试挂二面的苦逼经历
  4. Centos7 系统登录密码忘记解决方法
  5. html做成小程序,微信小程序——简单静态网页的制作
  6. PMP证书,项目经理事业进步的阶梯
  7. 更改计算机一级密码,详细教您如何更改win10系统电脑密码
  8. 最新php面试题及答案
  9. gcrobustvar:基于VAR的稳健性Granger因果检验
  10. wav音频文件格式解析