地址栏传参,加密参数中特殊字符处理问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地址栏传参,加密参数中特殊字符处理问题相关的知识,希望对你有一定的参考价值。

参考技术A 在项目A中通过get请求项目B,在地址栏中传送加密参数过去,由于参数中含有(/   =)等特殊字符,所以项目B无法获取到正确的值

eg:http://localhost:8080/B?a=BCrM/R4AA69r3o3PzIUrPQ==

项目B在request中获取到的是  a=BCrM;R4AA69r3o3PzIUrPQ

解决方法:

项目A中对参数加密后再进行一次转义

URLEncoder. encode ( "BCrM/R4AA69r3o3PzIUrPQ==" , "utf-8" )

转义后得到: X74XKImxXtxoOirDT6EC6g%3D%3D

新请求地址:http://localhost:8080/B?a=X74XKImxXtxoOirDT6EC6g%3D%3D

项目B获取参数后进行

URLDecoder.decode(“ X74XKImxXtxoOirDT6EC6g%3D%3D ”,"utf-8");

接口传参特殊字符处理方法

一:场景---参数中有%等,后端不便处理可在前端传入时编辑
(1)方法:
encodeKey = key => {

const encodeArr = [
  {
    code: \'%\',
    encode: \'%25\',
  },
  {
    code: \'?\',
    encode: \'%3F\',
  },
  {
    code: \'#\',
    encode: \'%23\',
  },
  {
    code: \'&\',
    encode: \'%26\',
  },
  {
    code: \'=\',
    encode: \'%3D\',
  },
  {
    code: \'+\',
    encode: \'%2B\',
  },
  {
    code: \'/\',
    encode: \'%2F\',
  },
];
return key.replace(/[%?#&=+/]/g, $ => {
  for (const k of encodeArr) {
    if (k.code === $) {
      return k.encode;
    }
  }
});

};
(2)调用
this.encodeKey(key)
若封装到通用逻辑例util.js页面 调用util.encodeKey(key)
二:出参时接口返回不可转化的\\n换行符
(1)方法
unEscapeHtml= content => {

let ct = content;
if (!ct) return \'\';
const reg = /\\\\n/;
if (reg.test(ct)) {
  ct = ct.replace(/\\\\n/g, \'\');
}
const div = document.createElement(\'div\');
div.style.display = \'none\';
div.innerHTML = ct;
return div.innerText;

},
};
(2)调用
this.unEscapeHtml(content)
若封装到通用逻辑例util.js页面 调用util.unEscapeHtml(content)
三:出参时返回 HTML 实体 &, <, >, ", \', 和 `
(1)方法
页面 import lodash from \'lodash\'; 调用:lodash.unescape(val)
方法详解:https://www.lodashjs.com/docs...

以上是关于地址栏传参,加密参数中特殊字符处理问题的主要内容,如果未能解决你的问题,请参考以下文章

AES地址栏传参加密

接口传参特殊字符处理方法

在传参时,url参数中包含+空格=%&#等特殊符号的处理

URL传参中不能带特殊的字符以及处理方案

Vue中js获取url参数,特殊字符的转译、逆转译

URL传参中不能带特殊的字符以及处理方案