日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

處理“URIError: URI malformed“的辦法

作者:過濾器 更新時間: 2022-08-05 編程語言

項目場景:

前端日益發(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

欄目分類
最近更新