Я построил следующую функцию с функциями из пакета tagsoup
.Он обрабатывает все именованные и числовые объекты из стандарта HTML5 (более 2000, см. Список ).
import qualified Text.HTML.TagSoup as TS
decodeHTMLentities :: (StringLike str, Show str) => str -> str
decodeHTMLentities s = TS.fromTagText $ head $ TS.parseTags s
StringLike
имеет экземпляры для String
, Lazy и Strict ByteString
и Text
.
Неизвестные объекты останутся без изменений.Если вы хотите получить предупреждение о неизвестных объектах, используйте:
> parseTagsOptions parseOptions{optTagWarning=True} "&asdasd;"
[TagText "&asdasd;",TagWarning "Unknown entity: asdasd"]