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 相关文章推荐
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
jquery等待效果示例
May 01 Javascript
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
js实现微信分享代码
Oct 11 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
简单的JS轮播图代码
Jul 18 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
Javascript 解构赋值详情
Nov 17 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 cli换行示例
2014/04/22 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
基于php实现的验证码小程序
2016/12/13 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
Javascript实现单例模式
2016/01/24 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python简单实现网页内容抓取功能示例
2018/06/07 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python高级property属性用法实例分析
2019/11/19 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
个人评价范文分享
2014/01/11 职场文书
药品采购员岗位职责
2014/02/08 职场文书
外国人聘用意向书
2014/04/01 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
订货会主持词
2015/07/01 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
python使用pymysql模块操作MySQL
2021/06/16 Python
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL