小议 html 实体解析
今天分享个小技巧,是群里一个朋友问的,"请问 + 这种类型的字符串怎么转换成我们想要的字符 + ,有什么简便的js方法吗"
其实问题说简单也简单,说难也难。我们要分情况来描述问题解决问题才行。
一. 纯数字实体编码
就例如 + , 这样的,那么借助 正则+fromCharCode 即可。
var str = "+ , -";
str = str.replace(/&#(\d+);/g, function(m, num){
return String.fromCharCode(num);
});
console.log(str);
这样可以得到我们想要的结果。
但是如果是其他情况呢?
二. 实体名,数字,十六进制实体编码
如 "& © ♥ +" 这样,有实体名,x20 空格字符的16进制和 32 空格的十进制。。
这样的,怎么玩?
刚刚那个只能识别十进制数字的实体。
如果不包含“实体名”的话,还是比较方便的,正则多匹配个x即可,如果有x,就解析16进制然后 fromCharCode 就OK了。
但是实体名就真的没办法躲过去了,只能去w3c上把所有实体搞下来做个k/v对象用。
这肯定不是理想的解决方案。
三. 利用节点解析
首先用 jQuery 来做个实验。
var str = "& © ♥ +";
str = $("<p>").html(str).text();
console.log(str);
可以看到,确实解析了,说明这样是思路是可行的。
下面给个非 jQuery 的好了,方便各种情况使用。
var entity = function (node) {
return function (str) {
node.innerHTML = str;
return node.innerText;
}
}(document.createElement("p")); var str = "& © ♥ +";
console.log( entity(str) );
缺陷:
当然好东西都是双刃剑,有好的一面,自然也有弊端。
比如你原先有html标签的,用节点解析的话,标签就都没了,只剩下干干净净的文本了。
所以按需使用。。
四. 总结
正则+fromCharCode 可以解析十进制十六进制的html实体,甚至可以在任何js环境下用,比如 node wsh 等等。。
但缺点也很明显,如果解析实体名的实体,只能收集所有实体名了。
createElement 实现的可以解析任何实体,但是只能借助dom实现,
node下也要加载dom之类的插件才行,wsh下有微软提供的htmlfile这样的com,实现起来还是轻松的。
也不是什么大缺陷,只是不能原生js实现。。
看需求取舍吧。
小议 html 实体解析的更多相关文章
- XML实体解析器的作用
XML实体解析器的作用 什么是实体解析器 如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上. 从这段文字可以看出来,实体解析器 ...
- 【LeetCode】1410. 实体解析器 HTML Entity Parser HTML
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换 日期 题目地址:https://leetcode ...
- XMD DTD约束 实体学习X1 普通实体 参数实体 内部实体 外部实体 内置实体 解析实体 不解析实体 实体声明 实体引用 字符引用
文档实体可能就是整个XML文档
- Spring Data Jpa系列教程--------实体解析和关联关系
Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...
- C#关于反序列化实例时,接收实体字段少于或大于原实体对象 解析测试
在项目中总会用到son解析,比如RabbitMQ中使用json串解析,比如发过来的实体对象有50个字段,而实际只需要用到里面的几个字段,这时我们创建实体时,只需要创建需要的几个字段即可. 测试实例,首 ...
- Hibernate的第一次测试解析
解析:此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通过属性作为筛选条件,如统计报表数据.使用 ...
- XML详解:第三部分 XML解析
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- XML 实体扩展攻击
XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...
- hibernate错题解析
01 Hibernate错题分析 解析: 此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通 ...
随机推荐
- 这可能是最详细的Python文件操作
删除 # ==================删除==================# 只能删除文件,若为目录则报错# 若文件正在使用,Windows下会直接报错,Linux下会在目录表中删除记录, ...
- 英特尔帮助优化 Epic 的《堡垒之夜》* 和 Unreal Engine*
您可能知道,Epic 的游戏<堡垒之夜>是 Unreal Engine* 技术的绝佳示例,<堡垒之夜>的开发团队正不断改进游戏,增加支持平台的数量并将信息反馈给引擎.为此,英特 ...
- PAT-1004 Counting Leaves
1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- IE=edge 让浏览器使用最新的渲染模式
Bootstrap不支持IE的兼容模式.为了让IE浏览器运行最新的渲染模式,建议将此 <meta> 标签加入到你的页面中: <metahttp-equiv="X-UA-Co ...
- PAT甲题题解-1072. Gas Station (30)-dijkstra最短路
题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平 ...
- 蓝牙BLE实用教程(转载)
欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Ready 和 Smart 以及传统蓝牙之间是什么关 ...
- Alpha版本项目展示得分
团队名称 得分 newbe 80 C705 100 ourteam 60 sevens 50 sixsix 190 dxteam 75 hots 200 Echo 90
- Beta版本冲刺(四)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...
- final版本发布评价II
其实我对技术上的问题了解不多,所以有些评语可能说的不对或者压根就没啥用.可直接忽略.请见谅. 1新蜂的俄罗斯方块,UI设计虽然给出了背景和颜色,但是感觉色彩对比也不好,模块之间也不协调.没有更多的说服 ...
- OneZero第四周——预完成功能点统计
本周OneZero将完成“统计”功能. 功能点统计如下: 1.主页单击记录,进入修改界面,修改记录. 2.主页长按记录,出现删除按钮,删除记录. 3.全部记录按分类进行饼图显示. 4.全部记录按分类进 ...