展开目录
简易转义字符转实体字符方法
nodejs转义html
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

用nodejs做采集网站时,需要把内容保存在本地txt中。由于网页中包含一些转义的字符需要解析成实体,而nodejs官方库并没有这个功能的支持。我也不想用第三方库,索性自己写了一个简易版的解析方法。

html转义字符有三种形式,以下用正则描述:


  1. 特殊含义的标记,格式为 "&[a-z]+;",例如 ,表示空格
  2. 10进制表示的转义字,格式为 "&#\d+;",例如A,表示"A"
  3. 16进制表示的转义字,格式为 "&#x\d+;",例如A,表示"A"

所以解析的方法需要对以上三种情况进行替换,其他的按照原文返回。最后实现代码如下:

'use strict';
// 特殊标记和数字对照表
let sp={
  'amp':38,
  'lt':60,
  'gt':62,
  'quot':34,
  'nbsp':160,
  'cent':162,
  'pound':163,
  'curren':164,
  'copy':169,
  'reg':174,
  'hellip':8230
};

// 匹配字符
let p=/\&(\#*)(x*)([a-z\d]+)\;*/ig;

// 输入参数为可包含转义字符的字符串,返回解析之后的结果
module.exports=(s)=>{
  return s.replace(p,(a)=>(()=>a.toLowerCase().replace(
    p,(...a)=>!a[1]?String.fromCharCode(sp[a[3]])||a[0]:
    String.fromCharCode(parseInt(a[3],a[2]?16:10))))());
};

// 调用示例
console.log(module.exports(' Ab d&#65 '));

代码很简单,唯一需要注意的是不加分号结尾的转义符号,所有浏览器都是识别的,有些网站开发会偷懒这样写,因此匹配时不要忘了这种特殊的情况。

相关文档

暂无

随便看看

  1. windows电脑防止自动休眠

  2. git 大小写不区分问题

  3. 定长消息队列读写优化

  4. css多行文本超出截断显示省略号

  5. css3自定义滚动条样式

  6. nginx 子域名对应文件夹

  7. sass变量和继承类写法

  8. ipsec vpn 添加新账号

  9. nodejs 长连接

  10. nginx用域名来转发请求

  11. 树莓派实现用pi用户自动登录

  12. html5 全屏代码

  13. 模拟307跳转情况

  14. 把树莓派的存储空间拓展到整张TF卡中

  15. 猴子选大王算法问题

  16. youku电脑版跳过广告代码

畅言模块加载中