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另类方法高效实现htmlencode()与htmldecode()函数的更多相关文章
- [转] javascript另类方法高效实现htmlencode()与htmldecode()函数
本文转自:http://blog.csdn.net/cuixiping/article/details/7846806 最常见的做法是采用正则表达式替换的方法,将特殊字符如 < > &am ...
- 解密SuperWebview的一种另类方法
解密SuperWebview的一种另类方法 什么是SuperWebview SuperWebview是APICloud官方推出的另一项重量级API生态产品,以SDK方式提供,致力于提升和改善移动设备W ...
- JavaScript - reduce方法,reduceRight方法 (Array)
JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...
- JavaScript slice() 方法
JavaScript slice() 方法 JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...
- JavaScript toLocaleString() 方法
JavaScript toLocaleString() 方法 JavaScript Array 对象 定义和用法 把数组转换为本地字符串. 语法 arrayObject.toLocaleString( ...
- 关于JavaScript lastIndexOf() 方法 w3school.com.cn写的不一定全对
关于JavaScript lastIndexOf() 方法 w3school.com.cn的表述是 定义和用法 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的 ...
- javascript一些方法兼容
javascript一些方法兼容 标签(空格分隔): javascript 方法收集 [TOC] Object.keys 参考地址 if (!Object.keys) Object.keys = fu ...
- 在Swift中使用JavaScript的方法和技巧
本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...
- JavaScript数组方法总结
由于最近都在freecodecamp上刷代码,运用了很多JavaScript数组的方法,因此做了一份关于JavaScript教程的整理,具体内容如下: 一.普通方法 1.join() 将数组元素连接在 ...
随机推荐
- Ubuntu上pip安装uwsgi失败的原因之一(未联网)
ubuntu@ubuntu:~$ sudo pip install uwsgi 报错:The directory '/home/ubuntu/.cache/pip/http' or its paren ...
- IIS Asp.Net 访问 Com组件 报拒绝访问
IIS Asp.Net 访问 Com组件 报拒绝访问 解决方法: IIS 程序池->高级设置->进程模式->标识->内置帐户=LocalSystem
- myEclipse异常:Subversion Native Library Not Available
参考文档:https://blog.csdn.net/zp357252539/article/details/44880319 Subversion Native Library Not Availa ...
- 用C# 7.0的switch...case模式匹配取代一堆if语句
今天在重构代码时对下面的一堆if语句实在看着不顺眼. if(activation == null) { _logger.LogError("x1"); return Boolean ...
- Django:视图views(一)
1.环境搭建 在django中,视图负责与web请求进行交互 视图本质上是一个Python函数,定义在booktest/views.py.通过django1/urls.py路由到该视图中. 首先经过创 ...
- Transfrom笔记
1.在不是以左上角为缩放点进行缩放时,其实比例不能为0,因为0将导致缩放可能出现动画效果不可控,务必选取0.1等较小值来变化
- onload和DOMContentLoaded
执行时间 onload必须等到页面内包括图片的所有元素加载完毕后才能执行. DOMContentLoaded是DOM结构绘制完毕后就执行,不必等到加载完毕. 编写个数不同 onload不能同时编写多个 ...
- tomcat在Eclipse中和idea中的使用
在eclipse中的使用 下载 http://tomcat.apache.org/ 部署项目到tomcat 常见问题 访问时如何出掉项目名 中文乱码问题 1.浏览器编码问题,修改浏览器的编码 2.js ...
- jetty在eclipse和Idea中的使用
eclipse中的配置 下载 http://www.eclipse.org/jetty/download.html 下载保存到特定的位置,解压. 整合到eclipse中 这里通过在eclipse中安装 ...
- 洛谷P3248 树 [HNOI2016] 主席树+倍增+分治
正解:主席树+倍增+分治 解题报告: 传送门! 首先看到这题会想到之前考过的这题 但是那题其实简单一些,,,因为那题只要用个分治+预处理就好,只是有点儿思维难度而已 这题就不一样,因为它说了是按照原树 ...