在開發專案的時候碰到一個問題,在JS這邊要導向從後端傳入的URL,
發現後端傳過來的URL特殊字元都會被轉義,
記錄一下解決的方法
後端傳過來的URL正常應該長這樣:
http://localhost:6371/AD/AD0030?EMPID=00001&DEPTID=629
但是在JS這邊下中斷點去看發現實際傳遞到前端的URL已經變成
http://localhost:6371/AD/AD0030?EMPID=00001&DEPTID=629,於是上網查了一下,
發現MVC的架構底下,從後端轉到前端,會自動將特殊符號轉為實體編號
除了後端傳往前端的特殊字元會被自動轉義之外,
前端傳往後端的資料,例如在textBox內輸入<span></span>
如果沒有額外處理特殊字元,也會出現以下錯誤
因此,在JS裡面寫了兩個function
var CommonUtility = {};
var CommonUtility = CommonUtility || {};
(function () {
// 轉義字元
// 將畫面上使用者輸入的 < > & " '轉成字元實體
function EscapeHTML(a){
a = "" + a;
return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
CommonUtility.EscapeHTML = EscapeHTML;
// 將字元實體 轉成 < > & " '
function UnescapeHTML(a) {
a = "" + a;
return a.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'");
}
CommonUtility.UnescapeHTML = UnescapeHTML;
})();
然後在前端的JS使用 EscapeHTML 將輸入的字元自行轉碼
下中斷點可看到,前端輸入的字元,要傳到後端之前,提早轉為字元實體
這樣後端就可以正常接受
另外一個Function:CommonUtility.UnescapeHTML 則是將後端轉往前端的字元實體還原回前端可以解析的符號