全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

简单说一下业务场景,前台用户通过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> 

编码反编码核心函数

 function html_encode(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, "&#39;"); 
    s = s.replace(/\"/g, "&quot;"); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(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(/&#39;/g, "\'"); 
    s = s.replace(/&quot;/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
 
 
  console.log(html_decode('&lt;div&gt;123&lt;/div&gt;')); 
  console.log(html_encode(html_decode('&lt;div&gt;123&lt;/div&gt;')));

实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
 function html_encode(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, "&#39;"); 
    s = s.replace(/\"/g, "&quot;"); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(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(/&#39;/g, "\'"); 
    s = s.replace(/&quot;/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
console.log(html_decode('&lt;div&gt;123&lt;/div&gt;')); 
console.log(html_encode(html_decode('&lt;div&gt;123&lt;/div&gt;')));
</script>
</head>
<body>

</body>
</html>

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


# js  # HTML转义  # HTML反转义  # JS及JQuery对Html内容编码 


相关文章: 制作公司内部网站有哪些,内网如何建网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  建站主机选购指南:核心配置优化与品牌推荐方案  如何在IIS7中新建站点?详细步骤解析  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何在万网自助建站平台快速创建网站?  如何快速上传自定义模板至建站之星?  如何通过NAT技术实现内网高效建站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  建站之星如何实现网站加密操作?  常州自助建站工具推荐:低成本搭建与模板选择技巧  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在阿里云域名上完成建站全流程?  如何在阿里云ECS服务器部署织梦CMS网站?  建站主机SSH密钥生成步骤及常见问题解答?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星客服服务时间及联系方式如何?  中山网站制作网页,中山新生登记系统登记流程?  建站主机是什么?如何选择适合的建站主机?  如何在服务器上三步完成建站并提升流量?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站之星安装步骤有哪些常见问题?  Java解压缩zip - 解压缩多个文件或文件夹实例  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  如何安全更换建站之星模板并保留数据?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  c++怎么用jemalloc c++替换默认内存分配器【性能】  广东专业制作网站有哪些,广东省能源集团有限公司官网?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  简历在线制作网站免费版,如何创建个人简历?  建站之星与建站宝盒如何选择最佳方案?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  c# 在ASP.NET Core中管理和取消后台任务  小建面朝正北,A点实际方位是否存在偏差?  如何通过网站建站时间优化SEO与用户体验?  潮流网站制作头像软件下载,适合母子的网名有哪些?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  ,柠檬视频怎样兑换vip?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  制作营销网站公司,淘特是干什么用的?  小型网站制作HTML,*游戏网站怎么搭建?  在线教育网站制作平台,山西立德教育官网?  建站主机选哪家性价比最高?  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何自定义建站之星模板颜色并下载新样式?  如何快速上传建站程序避免常见错误? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。