Re: [問題] 把 HTML 指令刪除

看板Ruby作者 (godfat 真常)時間17年前 (2007/10/03 21:23), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/5 (看更多)
※ 引述《shelary (台中喵小咩)》之銘言: : 於是我用 info.split(//u)[0..100] 去切100個字 : 可是 info 裡面已經有 HTM 語法了..去切 100 個字不旦切不準 : 而且還造成 HTML 的語法被切的不完整 : 所以我想說在顯示第一頁的那個 100 字時...先把 HTML 語法都刪掉 : 刪掉HTML後..再去切 100 個字.... : 等點選 more... 之後...才會顯示有含 HTML 的完整版 : 我的問題是....怎樣把 HTML 語法刪掉比較容易? 如果不保留 html 的話,那我目前想到的辦法還算可以處理。 剛剛在想的是,如果要保留 html 再 truncate 的話,實在不好處理, 如: 「今天是我<b>一歲</b>生日」 假設要 truncate 掉一半且保留 html, 這恐怕會變得很複雜。 或許要用純遞迴的方式才會好做,這我暫時還沒什麼好想法。 : 我想的是去尋找 < 和 > 包起來的東西.... : 但是如果使用者的自介裡有 >_< 這類的表情圖案時怎麼辦? : 或是有更好的方法? 請教大家囉 基本上,html parsing 這種複雜到爆炸的事,最好不要自己寫, 人家是一個完整的 project, 自己寫的話會累死的 XD 要灌 tidy, 我自己電腦上是這樣灌的: sudo port install tidy sudo gem install tidy 本程式開始: $KCODE = 'u' require 'jcode' # 拿來算字數 require 'rubygems' require 'tidy' # 由於他不是直接把 lib 吃進去,所以要給他 .so/.dll/.dylib 的路徑: Tidy.path = '/opt/local/lib/libtidy.dylib' require 'open-uri' # 這滿好用的,rails 的話 open 那邊再自己改吧 msg = Tidy.open{ |tidy| tidy.options.input_xml = true tidy.options.output_xml = true # 這兩個要設,不然輸出會有 html header tidy.options.input_encoding = :utf8 tidy.options.output_encoding = :utf8 # 網頁還是 utf-8 好 tidy.clean '<message>' + open('test.xml') + '</message>' # 多加 <message></message> 是為了避免吃掉頭尾 } require 'rexml/document' msg = REXML::Document.new msg words = [] def extract words, elements if elements.kind_of? REXML::Text words << elements.to_s # 是文字就直接儲存 elsif elements.kind_of? REXML::Element elements.each{ |e| extract words, e } # 不是文字就要全部依序抓出來 else raise TypeError.new('what is it? : ' + elements.inspect) # 我不知道會不會有其他 type 的東西? end end extract words, msg puts words.join # 你要的純文字 puts words.join.jsize # 字數 如果真的要保留 html, 應該要在 elements.each 那邊動手腳, 可能要用遞迴的方式,我不是很確定,要再研究。 truncate 時也要考慮 tag 完整性,會非常複雜。 -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.30.220 ※ 編輯: godfat 來自: 220.134.30.220 (10/03 23:03)

10/06 12:20, , 1F
要保留HTML又要切是太困難了..只能把HTML全清掉再切字數
10/06 12:20, 1F
文章代碼(AID): #170vVjFu (Ruby)
討論串 (同標題文章)
文章代碼(AID): #170vVjFu (Ruby)