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

摘要:
:; varoutput=温度。innerHTML;temp=空;returnoutput;}vartagText=“123和456”;安慰日志;//&书信电报;p>&书信电报;b>123&456</b></p>从测试结果中,您可以看到html标记和&符号已被转义并保存。

原文地址:http://blog.600km.xyz/2015/12/15/js-encode-html-tags/

简单说一下业务场景,前台用户通过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));//&lt;p&gt;&lt;b&gt;123&amp;456&lt;/b&gt;&lt;/p&gt; 

通过测试结果,可以看到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);//&lt;p&gt;&lt;b&gt;123&amp;456&lt;/b&gt;&lt;/p&gt;
console.log(HTMLDecode(encodeText)); //<p><b>123&456</b></p> 

Best regards 
Wang Yuheng

免责声明:文章转载自《【转】 JS实现HTML标签转义及反转义》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇freemarke之TemplateDirectiveModel详解掩膜(mask)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js设置div透明度

原生js设置透明度 为了兼容IE与其他浏览器对透明度的设置,我们需要对以上两种样式分别进行设置; 复制代码代码如下:var alpha = 30; //透明度值变量 var oDiv = document.getElementById('div1'); //获取DOM元素对象 oDiv.style.filter = 'alpha(opacity:'+alp...

js对flv提取h264、aac音视频流

FLV提取里面的h264视频流 FLV和MP4支持的编码 流媒体和媒体文件的区别 流媒体是指将一连串的多媒体资料压缩后,经过互联网分段发送资料,在互联网上即时传输影音以供观赏的一种技术与过程,此技术使得资料数据包得以像流水一样发送,如果不使用此技术,就必须在使用前下载整个媒体文件。flv属于流媒体格式,所以很适合做低延时的直播 对比hls和mp4 相对于...

动态加载JS函数

一般性的,当我们需要加载js文件的时候都会使用script标签来实现,类似于如下代码: 代码如下: <script type="text/javascript" src="http://t.zoukankan.com/example.js"></script> 但是直接使用script标签来加载js文件会有如下一些缺点: 1...

JS最新技术ES6,结合Vue全局注册,实现Axios封装配置插件!

接下来,带来js全新技术ES6,结合Vue install全局组件实现Axios封装,以代码形式讲解。 1、请求封装 //file:src/api/http/http.js import axios from 'axios' axios.create(); axios.interceptors.request.use((config)=>{ //...

day049--jQuery文档操作示例

DOM操作(CRUD增改查删)   创建元素 $('span') // 创建一个span标签   后置插入操作   append(), appendTo() <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <...

RSA加密前端JS加密,后端asp.net解密,报异常

RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() { debugger; var pwdStr = document.getElementById("txtPa...