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 相关文章推荐
在线编辑器中换行与内容自动提取
Apr 24 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 Javascript
微信小程序微信支付接入开发实例详解
Apr 12 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
Sep 05 Javascript
jQuery弹框插件使用方法详解
May 26 jQuery
js实现跳一跳小游戏
Jul 31 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
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
PHP出错界面
2006/10/09 PHP
建立文件交换功能的脚本(二)
2006/10/09 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
php实现socket推送技术的示例
2017/12/20 PHP
做网页的一些技巧
2007/02/01 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
vue实现评论列表功能
2019/10/25 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
python Django框架实现自定义表单提交
2016/03/25 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python返回数组/List长度的实例
2018/06/23 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
军训心得体会
2013/12/31 职场文书
2014年环保工作总结
2014/11/26 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
体育教师个人工作总结
2015/02/09 职场文书
如何写辞职书
2015/02/26 职场文书
治庸问责工作总结
2015/08/11 职场文书
成人成长感言如何写?
2019/08/16 职场文书
python基础详解之if循环语句
2021/04/24 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android