javascript对HTML字符转义与反转义

(编辑:jimmy 日期: 2024/11/19 浏览:2)

1.背景:在项目中,经常遇到一些字符需要进行转义后才能显示到界面上,如“&”,在界面中显示的是“&”,在html中书写“&”,显示在界面的中的依然是“&”。

这时候,就需要进行转义

 javascript对HTML字符转义与反转义

2.解决方案

<script>

var HtmlUtil = {

 /*1.用浏览器内部转换器实现html转码*/

 htmlEncode:function (html){

 //1.首先动态创建一个容器标签元素,如DIV

 var temp = document.createElement ("div");

 //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)

 (temp.textContent != undefined ) "div");

 //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)

 temp.innerHTML = text;

 //3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。

 var output = temp.innerText || temp.textContent;

 temp = null;

 return output;

 },

 /*3.用正则表达式实现html转码*/

 htmlEncodeByRegExp:function (str){ 

 var s = "";

 if(str.length == 0) return "";

 s = str.replace(/&/g,"&amp;");

 s = s.replace(/</g,"&lt;");

 s = s.replace(/>/g,"&gt;");

 s = s.replace(/ /g,"&nbsp;");

 s = s.replace(/\'/g,"'");

 s = s.replace(/\"/g,""");

 return s; 

 },

 /*4.用正则表达式实现html解码*/

 htmlDecodeByRegExp:function (str){ 

 var s = "";

 if(str.length == 0) return "";

 s = str.replace(/&amp;/g,"&");

 s = s.replace(/&lt;/g,"<");

 s = s.replace(/&gt;/g,">");

 s = s.replace(/&nbsp;/g," ");

 s = s.replace(/'/g,"\'");

 s = s.replace(/"/g,"\"");

 return s; 

 }

 };

</script> 

使用方法:HtmlUtil.htmlDecodeByRegExp("&amp;")

PS:使用正则

使用正则转码:

var value = document.getElementById('input').value.trim();
 //对用户输入进行转义
 value = value.replace(/&/g,"&amp;");
 value = value.replace(/</g,"&lt;");
 value = value.replace(/>/g,"&gt;");
 value = value.replace(/ /g,"&nbsp;");
 value = value.replace(/"/g,'&quot;');

使用正则解码:

var value = e.target.innerText;
 // value = decodeURIComponent(value);
 value = value.replace(/&amp;/g,"&");
 value = value.replace(/&lt;/g,"<");
 value = value.replace(/&gt;/g,">");
 value = value.replace(/&nbsp;/g," ");
 value = value.replace(/&quot/g,"'");

下面是其他网友的补充

在编写html时,经常需要转义,才能正常显示在页面上。

并且,还可以防止xss。

解决方案:

一, 使用正则:

使用正则转码:

var value = document.getElementById('input').value.trim();
 //对用户输入进行转义
 value = value.replace(/&/g,"&amp;");
 value = value.replace(/</g,"&lt;");
 value = value.replace(/>/g,"&gt;");
 value = value.replace(/ /g,"&nbsp;");
 value = value.replace(/"/g,'&quot;');

使用正则解码:

var value = e.target.innerText;
// value = decodeURIComponent(value);
 value = value.replace(/&amp;/g,"&");
 value = value.replace(/&lt;/g,"<");
 value = value.replace(/&gt;/g,">");
 value = value.replace(/&nbsp;/g," ");
 value = value.replace(/&quot/g,"'");

由于编辑器的编码问题,其实就是

将<用&lt;替换,>替换为&gt;,空格替换为&nbsp;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?