2010-11-18 43 views
4

我正在尋找一個包含html字符實體(如 等)的字符串,並用字符串字符替換它們。我通過twitter的API獲取數據,文本包含這些實體。任何人都知道現有的圖書館是這樣做的嗎?Haskell:刪除字符串中的html字符實體

感謝您的幫助!

+0

感謝您的編輯湯姆,滑了我的腦海。 – Hojdra 2010-11-18 18:34:55

+0

你會考慮改變接受的答案(這是一個廢棄的圖書館,會錯過許多實體)? – 2016-04-24 11:58:55

回答

3

的Web.Encodings包裝上hackage看起來很有希望(在decodeHtml功能):

http://hackage.haskell.org/packages/archive/web-encodings/0.3.0.2/doc/html/Web-Encodings.html

+1

請注意,它不支持所有的HTML實體,只有一個子集 - 它「吞下」任何它不知道的,即。他們會消失。 – Orbling 2010-11-18 19:35:53

+1

非常完美,非常感謝!我可以問你怎麼找到這個?我發誓我做了一個相當徹底的搜索(谷歌,hoogle,hackage),但無法找到任何東西。 – Hojdra 2010-11-18 19:36:36

+0

我搜索谷歌的「haskell實體解碼」,這是第二個條目。只是知道你想要一個「實體解碼器」並知道你已經是Haskell的包庫的問題。 :-) – Orbling 2010-11-18 19:47:06

-6

你好嘗試下面的代碼,將制定出

labelTR = labelTR.replace(/(?: |")/g,''); 
+2

我建議你查看有多少可能的實體:http://en.wikipedia。org/wiki/List_of_XML_and_HTML_character_entity_references 我不認爲正則表達式是要走的路。此外,您的解決方案不在haskell中。 – andsens 2012-12-18 23:26:39

+0

雖然這可能有效,但爲自己寫這些任務的函數並不是一個好主意。一個圖書館也會包含更少的錯誤,錯誤等。 – 2015-02-09 14:38:25

2

我建下面的函數與功能來自包tagsoup。它處理來自HTML5標準的所有命名和數字實體(超過2000,see the list)。

import qualified   Text.HTML.TagSoup as TS 

decodeHTMLentities :: (StringLike str, Show str) => str -> str 
decodeHTMLentities s = TS.fromTagText $ head $ TS.parseTags s 

StringLike有實例爲String,懶惰和嚴格ByteStringText

未知實體將保持不變。如果你想對未知實體使用警告:

> parseTagsOptions parseOptions{optTagWarning=True} "&asdasd;" 
[TagText "&asdasd;",TagWarning "Unknown entity: asdasd"]