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