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实现类似滑动门切换效果的层切换
Sep 23 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
Bootstrap三种表单布局的使用方法
Jun 21 Javascript
浅析Javascript ES6中的原生Promise
Aug 25 Javascript
JavaScript数组操作详解
Feb 04 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
Jul 31 Javascript
响应式框架Bootstrap栅格系统的实例
Dec 19 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
关于Layui Table隐藏列问题
Sep 16 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
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
Python如何判断数独是否合法
2016/09/08 Python
python实现报表自动化详解
2017/11/16 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python 负数取模运算实例
2020/06/03 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
const和static readonly区别
2013/05/20 面试题
计算机应用专业自荐信
2014/07/05 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript