在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 相关文章推荐
js判断是否为数组的函数: isArray()
Oct 30 Javascript
ASP.NET中AJAX 调用实例代码
May 03 Javascript
ie下$.getJSON出现问题的解决方法
Feb 12 Javascript
js实现图片旋转的三种方法
Apr 10 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
JavaScript实现网站访问次数统计代码
Aug 12 Javascript
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
layer 刷新某个页面的实现方法
Sep 05 Javascript
vue中input的v-model清空操作
Sep 06 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
数据库相关问题
2006/10/09 PHP
PHP安全性漫谈
2012/06/28 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
Javascript----文件操作
2007/01/18 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
JS中操作JSON总结
2020/12/06 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
pandas中Timestamp类用法详解
2017/12/11 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
python实现顺时针打印矩阵
2019/03/02 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
远程调用的原理
2014/07/05 面试题
团队精神演讲稿
2013/12/31 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
干部考核工作总结
2015/08/12 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android