在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 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
Feb 06 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
AngularJS 文件上传控件 ng-file-upload详解
Jan 13 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
Angular2实现的秒表及改良版示例
May 10 Javascript
Vue实现购物车详情页面的方法
Aug 20 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 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
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
jQuery之字体大小的设置方法
2014/02/27 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python切片用法实例教程
2014/09/08 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
本科生学习总结的自我评价
2013/10/02 职场文书
生物制药自我鉴定
2014/01/25 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
端午节活动总结
2014/08/26 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python