JS Html转义和反转义(html编码和解码)的实现与使用方法总结


Posted in Javascript onMarch 10, 2020

本文实例讲述了JS Html转义和反转义(html编码和解码)的实现与使用方法。分享给大家供大家参考,具体如下:

1、JS实现html转义和反转义主要有两种方式:

1)、利用用浏览器内部转换器实现html转义;

2)、用正则表达式实现html转义;

2、封装的JS工具类:

var HtmlUtil = {
    /*1.用浏览器内部转换器实现html编码(转义)*/
    htmlEncode:function (html){
      //1.首先动态创建一个容器标签元素,如DIV
      var temp = document.createElement ("div");
      //2.然后将要转换的字符串设置为这个元素的innerText或者textContent
      (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
      //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
      var output = temp.innerHTML;
      temp = null;
      return output;
    },
    /*2.用浏览器内部转换器实现html解码(反转义)*/
    htmlDecode:function (text){
      //1.首先动态创建一个容器标签元素,如DIV
      var temp = document.createElement("div");
      //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
      temp.innerHTML = text;
      //3.最后返回这个元素的innerText或者textContent,即得到经过HTML解码的字符串了。
      var output = temp.innerText || temp.textContent;
      temp = null;
      return output;
    },
    /*3.用正则表达式实现html编码(转义)*/
    htmlEncodeByRegExp:function (str){ 
       var temp = "";
       if(str.length == 0) return "";
       temp = str.replace(/&/g,"&");
       temp = temp.replace(/</g,"<");
       temp = temp.replace(/>/g,">");
       temp = temp.replace(/\s/g," ");
       temp = temp.replace(/\'/g,"'");
       temp = temp.replace(/\"/g,""");
       return temp;
    },
    /*4.用正则表达式实现html解码(反转义)*/
    htmlDecodeByRegExp:function (str){ 
       var temp = "";
       if(str.length == 0) return "";
       temp = str.replace(/&/g,"&");
       temp = temp.replace(/</g,"<");
       temp = temp.replace(/>/g,">");
       temp = temp.replace(/ /g," ");
       temp = temp.replace(/'/g,"\'");
       temp = temp.replace(/"/g,"\"");
       return temp; 
    },
    /*5.用正则表达式实现html编码(转义)(另一种写法)*/
    html2Escape:function(sHtml) {
       return sHtml.replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&','"':'"'}[c];});
    },
    /*6.用正则表达式实现html解码(反转义)(另一种写法)*/
    escape2Html:function (str) {
       var arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'};
       return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];});
    }
  };

3、测试及效果:

1)、html代码:

<div>&</div>
<div>&</div>
<div id="testdiv"></div>
<div id="testdiv1"></div>
<div id="testdiv2"></div>

<div id="regdiv"></div>
<div id="regdiv1"></div>
<div id="regdiv2"></div>

<div id="regdiv3"></div>
<div id="regdiv4"></div>
<div id="regdiv5"></div>

2)、js测试代码:

var strHtml='<div style="color:blue">符号:&<div>';
  document.getElementById("testdiv").innerHTML=strHtml;

  var encodedHtml= HtmlUtil.htmlEncode(strHtml);// "<div style="color:blue">符号:&amp;<div>"
  document.getElementById("testdiv1").innerHTML=encodedHtml;

  var decodedHtml=HtmlUtil.htmlDecode(encodedHtml);// '<div style="color:blue">符号:&<div>'
  document.getElementById("testdiv2").innerHTML=decodedHtml;

  var strHtml_1='<div style="color:red">符号:&<div>';
  document.getElementById("regdiv").innerHTML=strHtml_1;

  var encodedHtml_1 =HtmlUtil.htmlEncodeByRegExp(strHtml_1);// "<div style="color:red">符号:&amp;<div>"
  document.getElementById("regdiv1").innerHTML=encodedHtml_1;

  var decodedHtml_1 =HtmlUtil.htmlDecodeByRegExp(encodedHtml_1);// '<div style="color:blue">符号:&<div>'
  document.getElementById("regdiv2").innerHTML=decodedHtml_1;

  var strHtml_2='<div style="color:green">符号:&<div>';
  document.getElementById("regdiv3").innerHTML=strHtml_2;

  var encodedHtml_2 =HtmlUtil.htmlEncodeByRegExp(strHtml_2);// "<div style="color:green">符号:&amp;<div>"
  document.getElementById("regdiv4").innerHTML=encodedHtml_2;

  var decodedHtml_2 =HtmlUtil.htmlDecodeByRegExp(encodedHtml_2);// '<div style="color:green">符号:&<div>'
  document.getElementById("regdiv5").innerHTML=decodedHtml_2;

3)、效果图:

 JS Html转义和反转义(html编码和解码)的实现与使用方法总结

4、其他的一些处理html字符串的常用方法

1)、去掉字符串中的html标签

function removeHtmlTab(tab) {
return tab.replace(/<[^<>]+?>/g,'');//删除所有HTML标签
}
removeHtmlTab('<div id="test">zyl</div><span>zzc</span>');// zylzzc

2)、回车\r\n转为<br/>标签

function return2Br(str) {
  return str.replace(/\r?\n/g,"<br />");
}

3)、去除开头结尾换行,并将连续3次以上换行转换成2次换行

function trimBr(str) {
  str=str.replace(/((\s| )*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次换行
  str=str.replace(/^((\s| )*\r?\n)+/g,'');//清除开头换行
  str=str.replace(/((\s| )*\r?\n)+$/g,'');//清除结尾换行
  return str;
}

4)、将多个连续空格合并成一个空格

function mergeSpace(str) {
  str=str.replace(/(\s| )+/g,' ');
  return str;
}
Javascript 相关文章推荐
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
JavaScript实现简单的拖动效果
Jul 02 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 Javascript
解决vue中虚拟dom,无法实时更新的问题
Sep 15 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
Oct 11 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 Javascript
基于ajax实现上传图片代码示例解析
Dec 03 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 Javascript
js模拟实现烟花特效
Mar 10 #Javascript
JS实现放烟花效果
Mar 10 #Javascript
JS实现烟花爆炸效果
Mar 10 #Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 #Javascript
JS实现网页烟花动画效果
Mar 10 #Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 #Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 #Javascript
You might like
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python django集成cas验证系统
2014/07/14 Python
Python的Django框架中的Context使用
2015/07/15 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python中eval与int的区别浅析
2019/08/11 Python
PHP统计代码行数的小代码
2019/09/19 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
Django celery异步任务实现代码示例
2020/11/26 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
喜之郎果冻广告词
2014/03/20 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
学生检讨书如何写
2014/10/30 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android