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 相关文章推荐
2010年最佳jQuery插件整理
Dec 06 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
基于JS实现无缝滚动思路及代码分享
Jun 07 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 Javascript
jquery+css3问卷答题卡翻页动画效果示例
Oct 26 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
bootstrap选项卡扩展功能详解
Jun 14 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
Feb 10 Javascript
微信小程序学习之自定义滚动弹窗
Dec 20 Javascript
JavaScript canvas实现跟随鼠标移动小球
Feb 09 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
php自动加载代码实例详解
2021/02/26 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
详解Python中for循环的使用方法
2015/05/14 Python
详解Python进程间通信之命名管道
2017/08/28 Python
Python_LDA实现方法详解
2017/10/25 Python
python实现音乐下载器
2018/04/15 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
keras中的History对象用法
2020/06/19 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
自动化专业毕业生自荐信
2013/11/01 职场文书
组织关系转移介绍信
2014/01/16 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
2014年新生军训方案
2014/05/01 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python 数据可视化之Seaborn详解
2021/11/02 Python
Python中字符串对象语法分享
2022/02/24 Python
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis