原來還有一種空格叫 "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