網(wǎng)站首頁 編程語言 正文
項目場景:
前端日益發(fā)展,能處理的事情也越來越多。像導出Excel,導出PDF這些原本是由完全后端處理,前端只需調(diào)用一次接口的任務,現(xiàn)在的公司也有前端的實現(xiàn)方式。我們公司(vue項目)的實現(xiàn)方式是前端寫一個多頁面模板,請求后端(java)接口獲取數(shù)據(jù),再把模板頁面路徑作為參數(shù)傳給后端(node.js)渲染返回PDF。
問題描述
模板頁面路徑難免攜帶一些復雜的參數(shù),一些特殊字符序列化(JSON.stringify)以及編碼(encodeURIComponent)之后會有編碼問題。
簡例:
let parmas = {
columns: [
{
label: '表頭',
props: 'th',
show: true
}
]
}
params = encodeURIComponent(encodeSpecialChar(JSON.stringify(params)))
let url = `${location.protocol}//${host}/xxx.html?params=${params}`
原因分析:
url包含一些特殊的關(guān)鍵詞,例如:# , & , =,而導致報錯的是 % ,是因為編碼漢字是 % 開頭的,多加一個 % 會導致 decodeURIComponent 執(zhí)行報錯。
解決方案:
可以在參數(shù)序列化之后把特殊字符替換。
特殊字符 | 含義 | 編碼 |
---|---|---|
% | 指定特殊字符 | %25 |
# | 表示錨點 | %23 |
& | URL Search分隔符 | %26 |
= | URL中指定參數(shù)的值 | %3D |
? | URL中分隔可查詢對象的URI和用于表示對該對象的查詢的一組單詞之間的邊界 | %25 |
/**
* 處理因為特殊字符導致的編碼原因
* @param {*} char 字符串
* @returns
*/
export const encodeSpecialChar = (char) => {
const encodeArr = [{
code: '%',
encode: '%25'
}, {
code: '?',
encode: '%3F'
}, {
code: '#',
encode: '%23'
}, {
code: '&',
encode: '%26'
}, {
code: '=',
encode: '%3D'
}]
return char.replace(/[%?#&=]/g, ($) => {
for (const k of encodeArr) {
if (k.code === $) {
return k.encode
}
}
})
}
原文鏈接:https://blog.csdn.net/qq_41268872/article/details/126154944
相關(guān)推薦
- 2022-06-25 Android開發(fā)MediaCodec和lamemp3多段音頻截取拼接_Android
- 2022-04-18 Android?app本地切換logo和名稱_Android
- 2022-08-06 C語言實現(xiàn)UDP通信_C 語言
- 2022-04-08 python實現(xiàn)有效的括號判斷實例代碼_python
- 2022-12-01 Docker系列學習之Swarm?mode管理節(jié)點常用命令詳解_docker
- 2022-11-18 React中用@符號編寫文件路徑實現(xiàn)方法介紹_React
- 2022-09-07 淺談React底層實現(xiàn)原理_React
- 2022-04-20 python實現(xiàn)Simhash算法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支