原来还有一种空格叫 "NBSP"

date
Mar 4, 2018
slug
nbsp
type
Post
status
Published
tags
技术
Web
summary
最近在用 Node 的 cheerio 类库整一个抓取课表的小爬虫,其中有部分不需要的信息的 HTML 标签内部只有一个   ,我想利用它作为特征来过滤掉无用的信息。
最近在用 Node 的 cheerio 类库整一个抓取课表的小爬虫,其中有部分不需要的信息的 HTML 标签内部只有一个  ,我想利用它作为特征来过滤掉无用的信息。
cheerio 默认会把所有HTML字符都转换为相应的实体(HTML Entity), 所以我设置了一个
cheerio.load(data, { decodeEntities: false });
的选项,把它们都还原为原本的字符。
没想到又打开了一个新坑。。。
起初的过滤代码是这样的
// 遍历单元格
var courses = courseCells.filter(function (i, el) {
  var html = $(el).html();
  return html !== " ";
});
然后惊奇地发现,居然没有过滤成功???
加了句 console.log(html !== " "),发现结果都是 true
所以这里的html里面的   和 " " 不是一个东西?
用 console.log(encodeURIComponent(html)),发现结果是
%C2%A0
一般的空格不是 %20 吗,果然它们不是一个东西。
搜索发现,这玩意儿原来叫 Non-breaking space,ASCII码是 160,用来防止两个连着的单词因为自动换行而拆散。
知道了问题所在,一切都变得简单了~
// 遍历单元格
var courses = courseCells.filter(function (i, el) {
  var html = $(el).html();
  return html !== String.fromCharCode(160);
});
 

© zgq354 2014 - 2022 | CC BY-NC-SA 4.0 | RSS