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


Posted in Javascript onApril 14, 2020

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

通过测试结果,可以看到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);//<p><b>123&456</b></p>
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, "&"); 
    s = s.replace(/</g, "<"); 
    s = s.replace(/>/g, ">"); 
    s = s.replace(/ /g, " "); 
    s = s.replace(/\'/g, "'"); 
    s = s.replace(/\"/g, """); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&/g, "&"); 
    s = s.replace(/</g, "<"); 
    s = s.replace(/>/g, ">"); 
    s = s.replace(/ /g, " "); 
    s = s.replace(/'/g, "\'"); 
    s = s.replace(/"/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
 
 
  console.log(html_decode('<div>123</div>')); 
  console.log(html_encode(html_decode('<div>123</div>')));

实例

<!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, "&"); 
    s = s.replace(/</g, "<"); 
    s = s.replace(/>/g, ">"); 
    s = s.replace(/ /g, " "); 
    s = s.replace(/\'/g, "'"); 
    s = s.replace(/\"/g, """); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&/g, "&"); 
    s = s.replace(/</g, "<"); 
    s = s.replace(/>/g, ">"); 
    s = s.replace(/ /g, " "); 
    s = s.replace(/'/g, "\'"); 
    s = s.replace(/"/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
console.log(html_decode('<div>123</div>')); 
console.log(html_encode(html_decode('<div>123</div>')));
</script>
</head>
<body>

</body>
</html>

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

Javascript 相关文章推荐
javascript AutoScroller 函数类
May 29 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
angularjs实现的购物金额计算工具示例
May 08 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
May 28 Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 #Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
Jan 05 #Javascript
如何提高Dom访问速度
Jan 05 #Javascript
AngularJS中run方法的巧妙运用
Jan 04 #Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
Jan 04 #Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 #Javascript
基于jQuery实现选项卡效果
Jan 04 #Javascript
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
php swoft框架实例用法
2020/12/22 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python中几种导入模块的方式总结
2017/04/27 Python
Python实现的归并排序算法示例
2017/11/21 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python for和else语句趣谈
2019/07/02 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
践行三严三实心得体会
2014/10/13 职场文书
工程部岗位职责范本
2015/04/11 职场文书
2015初一年级组工作总结
2015/07/24 职场文书