網站首頁 編程語言 正文
項目場景:
前端日益發展,能處理的事情也越來越多。像導出Excel,導出PDF這些原本是由完全后端處理,前端只需調用一次接口的任務,現在的公司也有前端的實現方式。我們公司(vue項目)的實現方式是前端寫一個多頁面模板,請求后端(java)接口獲取數據,再把模板頁面路徑作為參數傳給后端(node.js)渲染返回PDF。
問題描述
模板頁面路徑難免攜帶一些復雜的參數,一些特殊字符序列化(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包含一些特殊的關鍵詞,例如:# , & , =,而導致報錯的是 % ,是因為編碼漢字是 % 開頭的,多加一個 % 會導致 decodeURIComponent 執行報錯。
解決方案:
可以在參數序列化之后把特殊字符替換。
特殊字符 | 含義 | 編碼 |
---|---|---|
% | 指定特殊字符 | %25 |
# | 表示錨點 | %23 |
& | URL Search分隔符 | %26 |
= | URL中指定參數的值 | %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
相關推薦
- 2022-12-06 React.memo?和?useMemo?的使用問題小結_React
- 2023-04-22 關于Python字典的底層實現原理_python
- 2022-04-24 Postman設置環境變量的實現示例_相關技巧
- 2023-03-26 python3.7環境下sanic-ext未生效踩坑解析_python
- 2022-06-12 Python裝飾器的定義和使用詳情_python
- 2022-03-31 QT實現單詞檢索軟件的示例代碼_C 語言
- 2022-10-17 Tomcat?Catalina為什么不new出來原理解析_Tomcat
- 2022-03-31 利用OpenCV實現質心跟蹤算法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支