javascript另类方法实现htmlencode()与htmldecode()函数实例分析


Posted in Javascript onNovember 17, 2016

本文实例讲述了javascript另类方法实现htmlencode()与htmldecode()函数。分享给大家供大家参考,具体如下:

最常见的做法是采用正则表达式替换的方法,将特殊字符如 < > & 等进行替换,htmlencode的时候这样替换还比较容易,但发过来htmldecode的时候就不一定好用了,因为需要反转的情况很多,出了常见的<>&以外,还有 ©"®等数十个字符实体,还有AB中文或者中文之类以字符的Unicode编码的十进制或16进制表示的转义,难以全部列举,用逐个替换不仅代码冗长而且低效,还容易漏掉某些字符。

代码如下:

function htmlencode(s){
  var div = document.createElement('div');
  div.appendChild(document.createTextNode(s));
  return div.innerHTML;
}
function htmldecode(s){
  var div = document.createElement('div');
  div.innerHTML = s;
  return div.innerText || div.textContent;
}

相当简洁!

编码原理就是创建TextNode节点,附加到容器中,再取容器的innerHTML.

解码原理是将字符串赋?容器的innerHTML,再取innerText或textContent.

测试一下:

//测试
document.onclick = function (){
  //<p> & </p>
  alert(htmlencode('<p> & </p>'));
  //<p> & © ABC 中文 中文 </p>
  alert(htmldecode('<p> & © ABC 中文 中文 </p>'));
}

效果不错。

htmldecode对入参有要求,如果入参不是合法的encode后的结果,可能无法得到预期结果。

我在google搜索,在cnblogs找到一篇和我一样思路的,原来已经有别人这样想了=||=,不过他的htmldecode代码有错误。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
网页中的图片的处理方法与代码
Nov 26 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
Apr 06 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
Aug 25 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
Vue面试题及Vue知识点整理
Oct 07 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
类和原型的设计模式之复制与委托差异
Jul 07 Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 #Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 #Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 #Javascript
用Vue.js实现监听属性的变化
Nov 17 #Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 #Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 #Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 #Javascript
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php组合排序简单实现方法
2016/10/15 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
Python base64编码解码实例
2015/06/21 Python
深入理解python函数递归和生成器
2016/06/06 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
python模拟斗地主发牌
2020/04/22 Python
Python学习笔记之装饰器
2020/08/06 Python
python 装饰器重要在哪
2021/02/14 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
临床医学大学生求职信
2013/09/28 职场文书
员工考核管理制度
2014/02/02 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
教师节活动总结
2014/08/29 职场文书
电影建国大业观后感
2015/06/01 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
MySQL系列之四 SQL语法
2021/07/02 MySQL