原來還有一種空格叫 "NBSP"

  • 2019 年 11 月 24 日
  • 筆記

最近在用 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);  });

參考: Non-breaking space – Wikipedia