【问题标题】:Haskell: Remove html character entities in a stringHaskell:删除字符串中的html字符实体
【发布时间】:2011-05-12 05:14:13
【问题描述】:

我正在寻找一个包含 html 字符实体(例如   等)的字符串,并将它们替换为文字字符串字符。我通过 twitter 的 api 获取数据,文本包含这些实体。有人知道这样做的现有图书馆吗?

感谢您的帮助!

【问题讨论】:

  • 您是否会考虑更改接受的答案(这是一个已弃用的库,会遗漏许多实体)?

标签: html parsing haskell html-parsing


【解决方案1】:

hackage 上的 Web.Encodings 包看起来很有前景(decodeHtml 函数):

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

【讨论】:

  • 请注意,它不支持所有 HTML 实体,仅支持一个子集 - 它会“吞下”任何它不知道的内容,即。它们会消失。
  • 太完美了,非常感谢!请问你是怎么找到这个的?我发誓我进行了相当彻底的搜索(google、hoogle、hackage),但没有找到任何东西。
  • 我在谷歌搜索“haskell 实体解码”,这是第二个条目。只是知道你想要一个“实体解码器”并了解 Haskell 的包库的问题,当然你已经知道了。 :-)
  • 哈哈哈,太棒了。再次感谢!
  • @HaskellElephant:我在haskell-beginners mailing list 上看到a message,询问它被弃用的原因是什么。它提到了Text.XML.decodeHtmlEntities 例程,它是xml-conduit 包的一部分。虽然说它不起作用,但它应该可以处理基本的实体解码。
【解决方案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、Lazy 和 Strict ByteStringText 的实例。

未知实体将保持不变。如果您想要关于未知实体的警告,请使用:

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

【讨论】:

    【解决方案3】:

    你好,试试下面的代码就可以了

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

    【讨论】:

    • 我建议您查看有多少可能的实体:en.wikipedia.org/wiki/… 我不认为正则表达式是要走的路。此外,您的解决方案不在 haskell 中。
    • 虽然这可能可行,但自己为此类任务编写函数并不是一个好主意。库总是包含更少的错误、错误等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2015-03-07
    • 1970-01-01
    • 2023-03-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多