欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS实现HTML标签转义及反转义

程序员文章站 2023-12-01 10:24:04
简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。 这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。...

简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。

这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。

由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。

这里提供一个非常简单有效的转义方案,利用了innerhtmlinnertext

注:火狐不支持innertext,需要使用 textcontent 属性,而ie早期版本不支持此属性,为了同时兼容ie及火狐,需要进行判断操作.

因为innertext(textcontent)会获取纯文本内容,忽略html节点标签,而innerhtml会显示标签内容,

所以我们先将需转义的内容赋值给innertext(textcontent),再获取它的innerhtml属性,这时获取到的就是转义后文本内容。

代码如下:

function htmlencode(html) {
 var temp = document.createelement("div");
 (temp.textcontent != null) ? (temp.textcontent = html) : (temp.innertext = html);
 var output = temp.innerhtml;
 temp = null;
 return output;
}
var tagtext = "<p><b>123&456</b></p>";
console.log(htmlencode(tagtext));//<p><b>123&456</b></p> 

通过测试结果,可以看到html标签及&符都被转义后保存。

同理,反转义的方法为先将转义文本赋值给innerhtml,然后通过innertext(textcontent)获取转义前的文本内容

function htmldecode(text) { 
 var temp = document.createelement("div"); 
 temp.innerhtml = text; 
 var output = temp.innertext || temp.textcontent; 
 temp = null; 
 return output; 
} 
var tagtext = "<p><b>123&456</b></p>";
var encodetext = htmlencode(tagtext);
console.log(encodetext);//<p><b>123&456</b></p>
console.log(htmldecode(encodetext)); //<p><b>123&456</b></p> 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!