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 相关文章推荐
javascript 函数速查表
Feb 07 Javascript
niceTitle 基于jquery的超链接提示插件
May 31 Javascript
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
JavaScript中的typeof操作符用法实例
Apr 05 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 Javascript
DOM基础教程之事件类型
Jan 20 Javascript
Vue.js进行查询操作的实例详解
Aug 25 Javascript
微信小程序实现选项卡功能
Jun 19 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
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
当海贼王变成JOJO风
2020/03/02 日漫
PHP怎样调用MSSQL的存储过程
2006/10/09 PHP
打造计数器DIY三步曲(上)
2006/10/09 PHP
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
学期自我鉴定范文
2013/10/01 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
优秀教师主要事迹
2014/02/01 职场文书
10的分与合教学反思
2014/04/30 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
员工试用期工作总结
2019/06/20 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript