zljiaa 2019-07-01
在项目开发过程中,我会有时候遇上这样的一个业务需求:对从数据库中读取出来的html数据进行反转义,才能在当前网页当前进行渲染。
或者另一个需求,对编辑器中的文本进行编码再传进数据库,或者从库中读取的数据需要进行解码才能渲染到网页上。
这时候,我们常常就会使用到转义与反转义,编码和解码。下面就是我一些项目中的代码片断,供参考,希望能给你提供个思路进行问题的解决
/** JQuery Html Encoding、Decoding * 原理是利用JQuery自带的html()和text()函数可以转义Html字符 * 虚拟一个Div通过赋值和取值来得到想要的Html编码或者解码 */ // 项目是2014的项目,依赖库是jquery,并非现在的react/angular/vue,jq版本是1.9. // Html编码获取Html转义实体 function htmlEncode(value) { return $("<div/>") .text(value) .html(); } // Html解码获取Html实体 function htmlDecode(value) { return $("<div/>") .html(value) .text(); } // 获取Html转义字符 function htmlEncode(html) { return document.createElement("a").appendChild(document.createTextNode(html)) .parentNode.innerHTML; } // 获取Html function htmlDecode(html) { var a = document.createElement("a"); a.innerHTML = html; return a.textContent; } // 编码 function html_encode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, ">"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/ /g, " "); s = s.replace(/\'/g, "'"); s = s.replace(/\"/g, '"'); s = s.replace(/\n/g, "<br>"); return s; } //解码 function html_decode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/>/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/ /g, " "); s = s.replace(/'/g, "'"); s = s.replace(/"/g, '"'); s = s.replace(/<br>/g, "\n"); return s; }