今天分享个小技巧,是群里一个朋友问的,"请问 + 这种类型的字符串怎么转换成我们想要的字符 + ,有什么简便的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 = "&amp; &copy;&nbsp;&hearts; +";
console.log( entity(str) );

缺陷:

当然好东西都是双刃剑,有好的一面,自然也有弊端。
比如你原先有html标签的,用节点解析的话,标签就都没了,只剩下干干净净的文本了。
所以按需使用。。

四. 总结

正则+fromCharCode 可以解析十进制十六进制的html实体,甚至可以在任何js环境下用,比如 node wsh 等等。。
但缺点也很明显,如果解析实体名的实体,只能收集所有实体名了。

createElement 实现的可以解析任何实体,但是只能借助dom实现,
node下也要加载dom之类的插件才行,wsh下有微软提供的htmlfile这样的com,实现起来还是轻松的。
也不是什么大缺陷,只是不能原生js实现。。

看需求取舍吧。

小议 html 实体解析的更多相关文章

  1. XML实体解析器的作用

    XML实体解析器的作用 什么是实体解析器 如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上. 从这段文字可以看出来,实体解析器 ...

  2. 【LeetCode】1410. 实体解析器 HTML Entity Parser HTML

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换 日期 题目地址:https://leetcode ...

  3. XMD DTD约束 实体学习X1 普通实体 参数实体 内部实体 外部实体 内置实体 解析实体 不解析实体 实体声明 实体引用 字符引用

    文档实体可能就是整个XML文档

  4. Spring Data Jpa系列教程--------实体解析和关联关系

    Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...

  5. C#关于反序列化实例时,接收实体字段少于或大于原实体对象 解析测试

    在项目中总会用到son解析,比如RabbitMQ中使用json串解析,比如发过来的实体对象有50个字段,而实际只需要用到里面的几个字段,这时我们创建实体时,只需要创建需要的几个字段即可. 测试实例,首 ...

  6. Hibernate的第一次测试解析

    解析:此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通过属性作为筛选条件,如统计报表数据.使用 ...

  7. XML详解:第三部分 XML解析

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. XML 实体扩展攻击

    XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...

  9. hibernate错题解析

    01 Hibernate错题分析   解析: 此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通 ...

随机推荐

  1. 华为云Istio服务网格,让应用治理智能化、可视化

  2. Mabatis中#{}和${}的区别

    动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql ...

  3. 数据库——SQL数据单表查询

    数据查询   语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...

  4. 《Linux 内核分析》第五周

    [李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...

  5. 通俗易懂的word2Vec负采样理解

    理解:http://www.shuang0420.com/2017/03/21/NLP%20%E7%AC%94%E8%AE%B0%20-%20%E5%86%8D%E8%B0%88%E8%AF%8D%E ...

  6. 团队作业之旅游行业APP分析

    随着经济的发展,不论是在工作中的男女老少,还是在校园中的童鞋,都喜欢在假期来一场说走就走的旅行,来缓解生活中的各种压力.当然,在国家面临经济转型的情况下,更多的将工业,农业转向服务型的旅游业,各个省市 ...

  7. input 清空值。(转载)

    ref顾名思义我们知道,其实它就可以被看座是一个组件的参考,也可以说是一个标识.作为组件的属性,其属性值可以是一个字符串也可以是一个函数. 其实,ref的使用不是必须的.即使是在其适用的场景中也不是非 ...

  8. Jquery 获取屏幕及滑块及元素的高度及距离

    alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(document).height()); //浏览器时下窗口文档的高度 alert($(docum ...

  9. ES6 数值的扩展

    在ES5中,我们存在几个全局函数 isNaN函数,isFinite函数,parseInt函数,parseFloat函数等,对于这些全局函数的使用很简单,就拿isNaN函数来举例. ES5中的写法是: ...

  10. Emacs 安装配置使用教程

    Emacs 安装配置使用教程 来源 https://www.jianshu.com/u/a27b97f900f7 序|Preface 先来一篇有趣的简介:Emacs和Vim:神的编辑器和编辑器之神 - ...