在JavaScript中对HTML进行反转义详解


Posted in Javascript onMay 18, 2016

在JavaScript中对字符串进行转义和反转义操作,常用的方法莫过于使用encodeURI (decodeURI)、encodeURIComponent (decodeURIComponent)这几个方法,具体使用方法和区别。

但是如何在JavaScript中对HTML进行反转义操作呢?例如下面这段代码:

var jsonData = {
  title: "<%= data.name? data.name : title %>",
  desc: "<%= data.content? data.content : '' %>",
  image: "<%- data.img? data.img : '' %>"
};

其中<%= %>包起来的部分是从服务端返回的值(上例中的代码取自Node.js中Express的ejs模板的代码)。如果从服务端返回的字符串中包含有引号,例如单引号或者双引号,那上述这段JS代码在浏览器中解释的时候会出现错误。如何解决这个问题呢?

其基本思路是通过页面上DOM元素的innerHTML属性将字符串进行HTML反转义,然后将值返回给JavaScript的变量。看下面两段代码:

1. 原生JavaScript写法:

function htmlDecode(input){
 var e = document.createElement('div');
 e.innerHTML = input;
 return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}

htmlDecode("<img src='myimage.jpg'>");

2. JQuery写法:

function htmlDecode(value){ 
 return $('<div/>').html(value).text(); 
}

第一个函数使用原生的JavaScript方法创建一个DIV元素,然后将需要反转义的字符串赋值给它的innerHTML属性,最后返回DIV元素的nodeValue属性的值。第二个函数则使用JQuery的方法,其基本原理和第一个函数相同。由于DIV元素都只是在内存中创建,并未append或inert到页面上,所以不会对现有的页面产生任何影响。

最后,我们将一开始的那段代码改成下面的这种方式:

var jsonData = {
  title: $('<div/>').html("<%= data.name? data.name : title %>").text(),
  desc: $('<div/>').html("<%= data.nontent? data.nontent : '' %>").text(),
  image: "<%- data.img? data.img : '' %>"
};

这样便可以在JavaScript中对服务器端返回的字符串进行HTML反转义操作了。

以上这篇在JavaScript中对HTML进行反转义详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 图片预加载 自动等比例缩放插件
Dec 25 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
js实现鼠标悬浮给图片加边框的方法
Jan 30 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
Feb 17 Javascript
初识angular框架后的所思所想
Feb 19 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
解决vuejs项目里css引用背景图片不能显示的问题
Sep 13 Javascript
Node+OCR实现图像文字识别功能
Nov 26 Javascript
深入理解JavaScript中的浮点数
May 18 #Javascript
Node.js返回JSONP详解
May 18 #Javascript
noty ? jQuery通知插件全面解析
May 18 #Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 #Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 #Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 #Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 #Javascript
You might like
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
JS面向对象编程详解
2016/03/06 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python3监控疫情的完整代码
2020/02/20 Python
在keras中实现查看其训练loss值
2020/06/16 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
个人自我鉴定总结
2014/03/25 职场文书
村居抓节水倡议书
2014/05/19 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
网络营销计划
2015/01/17 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android