JS实现HTML标签转义及反转义
程序员文章站
2023-12-13 08:22:28
简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。
这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。...
简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。
这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。
由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。
这里提供一个非常简单有效的转义方案,利用了innerhtml和innertext
注:火狐不支持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>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!