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 相关文章推荐
js 纯数字不重复排列的另类方法
Jul 17 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
Jan 03 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
Node.js + Redis Sorted Set实现任务队列
Sep 19 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
Jan 13 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
通过实例解析json与jsonp原理及使用方法
Sep 27 Javascript
vue实现标签云效果的示例
Nov 09 Javascript
vue里使用create, mounted调用方法
Apr 26 Vue.js
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
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
Python中常见的异常总结
2018/02/20 Python
python进度条显示之tqmd模块
2020/08/22 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
函授本科自我鉴定
2014/02/04 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
银行贷款收入证明
2014/10/17 职场文书
初二学生评语大全
2014/12/26 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android