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简单的图片放大缩小的两种方法
Nov 11 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
Feb 10 Javascript
前端构建工具之gulp的语法教程
Jun 12 Javascript
详解基于angular-cli配置代理解决跨域请求问题
Jul 05 Javascript
node.js操作MongoDB的实例详解
Oct 11 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
基于vue实现一个神奇的动态按钮效果
May 15 Javascript
node.js中module模块的功能理解与用法实例分析
Feb 14 Javascript
微信小程序订阅消息(java后端实现)开发
Jun 01 Javascript
video.js添加自定义组件的方法
Dec 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
php读取csc文件并输出
2015/05/21 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
python生成器推导式用法简单示例
2019/10/08 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
一套Delphi的笔试题二
2013/05/11 面试题
汽车驾驶求职信
2013/10/25 职场文书
学校联谊协议书
2014/09/16 职场文书
北大自主招生自荐信
2015/03/04 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
学习心理学心得体会
2016/01/22 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL