Rails 如何過濾你要的 HTML tag 內容
喜歡作者的文章嗎?馬上按「關注」,當作者發佈新文章時,思書™就會 email 通知您。
思書是公開的寫作平台,創新的多筆名寫作方式,能用不同的筆名探索不同的寫作內容,無限寫作創意,如果您喜歡寫作分享,一定要來試試! 《 加入思書》
思書™是自由寫作平台,本文為作者之個人意見。
給本文個喜歡
或不
關於作者
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯
看看作者的其他文章
看看思書的其他文章
一些看是很簡單的要求,實務上,卻可能很不簡單!
我現在就碰到一個很簡單的要求,就是把一個 HTML 內容做一份字數限制的簡述「summary」,很直覺的就是很簡單嘛,就移除所有的 HTML tags,在抓前幾個字就好了,不過就是一行碼:
這麼簡單的一行碼就移除所有的 html tag,前後與連續的空白,再切掉超過的部分,很簡單啊,不過,馬上就遇到很多問題了,客戶說:表格不要、照片的說明不要、程式碼不要⋯⋯
那要怎麼做呢?我們就已以下這個 HTML fragment 來測試:
這個 html fragment 很簡單,就是 p 跟 table,我們要做的實驗也很簡單,就是只要 <p> 不要 <table>,很直覺得,我們就是用個 Rails 內建 helper:sanitize,在 Rails 的文件中,也說可以很簡單的選擇客製化的 whitelisted tags 選擇:
這個 sanitize 很清楚的要求要移出 table,只保留在tags 中指定的 html tags,輸出的結果還不錯:
那要是用網路上很多人推薦的 sanitize gem 呢?
rgrove/sanitize — Whitelist-based Ruby HTML and CSS sanitizer. Contribute to rgrove/sanitize development by creating an account on GitHub. Go to GitHub
它更簡單好用,只要指定你要留下來的 tags ⋯⋯
只可惜,它是把不要的 tag 去除掉了,但沒有去掉裡面的內容,這是他的輸出:
所以,sanitize gem 並不合我們的需求,rails內建的 sanitize 是我們要的,但是,對不同的情境,就要看不同的需求了,也許,sanitize gem 大合您意。
另一個做法可以用 nokogiri,它幾乎沒有限制,但是,有種殺雞用牛刀的感覺,而且,會有很多行的碼,我不是很喜歡。
有一個要注要的是,很多這類的程式碼都會被用在 helper 中,當用 rails c 去測試時,必須要
ApplicationController.helpers.my_method(parameter)
再加上 reload!,helper 只是一個住在記憶體中的 instant,還蠻討厭的。不過真要做一個能簡述「summary」其實絕不是以上所說的那麼簡單,真正要做到有意義的簡述,就必須要用到 AI 人工智慧,google 有一個開發案用 tensorflow 來做文章的簡述 tensorflow,也有很多 github 的開源在做這個,例如:sumy,Readability 等等,ruby 的世界在 AI 好像沒有那麼多案子,可以確定的是,這會是一個很有趣也很有未來的挑戰,以後,看能不能用 AI 來幫忙學生交讀書心得,哈哈哈哈哈!