后端返回的\u003c\u003e等中文Unicode編碼格式,前端js如何轉(zhuǎn)為HTML?
1. 問(wèn)題背景與分析
在前后端交互中,后端返回的數(shù)據(jù)可能經(jīng)過(guò)安全編碼處理,將HTML特殊字符轉(zhuǎn)換為Unicode轉(zhuǎn)義序列(如“<”轉(zhuǎn)為“u003c”,“>”轉(zhuǎn)為“u003e”)。這種做法有效防止了XSS攻擊,但前端接收到數(shù)據(jù)后直接插入DOM會(huì)導(dǎo)致亂碼顯示。
例如,后端返回的JSON數(shù)據(jù):
{ "content": "u003cbu003e加粗文本u003c/bu003e" }
如果直接將內(nèi)容插入到DOM中,瀏覽器會(huì)將其作為純文本顯示,而非渲染成HTML結(jié)構(gòu)。
2. 關(guān)鍵技術(shù)點(diǎn)解析
解決此問(wèn)題的關(guān)鍵技術(shù)點(diǎn)在于:Unicode轉(zhuǎn)義字符的解碼和HTML字符串的安全渲染。以下是具體的技術(shù)要點(diǎn):
- 使用JavaScript內(nèi)置方法對(duì)Unicode轉(zhuǎn)義字符進(jìn)行解碼。
- 確保解碼后的HTML字符串能夠安全地插入到DOM中,避免引入新的XSS風(fēng)險(xiǎn)。
以下是兩種常見(jiàn)的實(shí)現(xiàn)方式:
2.1 使用String.fromCharCode解碼
可以通過(guò)正則表達(dá)式匹配所有Unicode轉(zhuǎn)義字符,并使用`String.fromCharCode`將其還原為原始字符。
function decodeUnicode(str) { return str.replace(/\\u[\dA-F]{4}/gi, function(match) { return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16)); }); } const decodedStr = decodeUnicode('u003cbu003e加粗文本u003c/bu003e'); console.log(decodedStr); // 輸出: <b>加粗文本</b>
2.2 使用DOMParser解析HTML
通過(guò)`DOMParser`將解碼后的HTML字符串解析為DOM節(jié)點(diǎn),再插入到頁(yè)面中。
function renderSafeHTML(htmlStr) { const parser = new DOMParser(); const doc = parser.parseFromString(htmlStr, 'text/html'); return doc.body.innerHTML; } const safeHTML = renderSafeHTML('<b>加粗文本</b>'); document.getElementById('container').innerHTML = safeHTML;
3. 解決方案流程圖
以下是解決方案的整體流程圖:
graph TD; A[接收J(rèn)SON數(shù)據(jù)] --> B{是否包含Unicode轉(zhuǎn)義?}; B --是--> C[調(diào)用decodeUnicode解碼]; C --> D[使用DOMParser解析HTML]; D --> E[插入到DOM中]; B --否--> F[直接插入DOM];
4. 注意事項(xiàng)與擴(kuò)展思考
在實(shí)際開(kāi)發(fā)中需要注意以下幾點(diǎn):
- 確保解碼邏輯只應(yīng)用于可信來(lái)源的數(shù)據(jù),避免引入XSS漏洞。
- 對(duì)于復(fù)雜的HTML結(jié)構(gòu),可以考慮使用第三方庫(kù)(如DOMPurify)進(jìn)一步增強(qiáng)安全性。
- 如果項(xiàng)目中頻繁涉及類(lèi)似需求,可以封裝一個(gè)通用工具函數(shù)以提高代碼復(fù)用性。
此外,還可以結(jié)合前后端約定,盡量減少后端返回的轉(zhuǎn)義字符,從而降低前端處理復(fù)雜度。
到此這篇關(guān)于后端返回的\u003c\u003e等Unicode編碼格式,前端js如何轉(zhuǎn)為HTML?的文章就介紹到這了,更多相關(guān)js將Unicode編碼轉(zhuǎn)為HTML內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)虎年春節(jié)頭像制作
春節(jié)來(lái)臨之際,看到有網(wǎng)友分享了網(wǎng)頁(yè)版的虎年頭像制作工具。本文將為大家介紹一個(gè)虎年春節(jié)頭像制作小程序,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-02-02javascript延時(shí)重復(fù)執(zhí)行函數(shù) lLoopRun.js
javascript延時(shí)重復(fù)執(zhí)行函數(shù) lLoopRun.js...2007-06-06深入淺出JS的Object.defineProperty()
這篇文章主要介紹了深入淺出JS的Object.defineProperty(),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06javascript數(shù)字驗(yàn)證的實(shí)例代碼(推薦)
下面小編就為大家?guī)?lái)一篇javascript數(shù)字驗(yàn)證的實(shí)例代碼(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08Js,alert出現(xiàn)亂碼問(wèn)題的解決方法
Js,alert出現(xiàn)亂碼問(wèn)題的解決方法,需要的朋友可以參考一下2013-06-06JavaScript中使用document.write向頁(yè)面輸出內(nèi)容實(shí)例
這篇文章主要介紹了JavaScript中使用document.write向頁(yè)面輸出內(nèi)容實(shí)例,本文講解了輸出普通文字、帶HTML標(biāo)簽內(nèi)容的方法,需要的朋友可以參考下2014-10-10