【问题标题】:PHP SAX parser for HTML?用于 HTML 的 PHP SAX 解析器?
【发布时间】:2011-02-25 17:23:03
【问题描述】:

我需要用于 PHP 的 HTML SAX(不是 DOM!)解析器,它能够处理甚至无效的 HTML 代码。 我需要它的原因是过滤用户输入的 HTML(删除所有属性和标签 允许的除外)并将 HTML 内容截断为指定长度。

有什么想法吗?

【问题讨论】:

  • 嗨,我目前正在寻找这样的自己。我想知道您是否仍在使用 HTML SAX Parser,或者您是否发现了其他东西?
  • Tidy 是“无效 HTML 代码”的唯一“通用解决方案”,PHP 有一个内置好的 SAX (!) 参见 my answer below。

标签: php sax html-parsing


【解决方案1】:

总结为两步:

  1. 使用 Tidy 将“免费的 HTML”转换为“好的 XHTML”。
  2. 使用 XML Parser 通过 SAX API 将 XHTML 解析为 XML。

首先使用Tidy (!),将“免费 HTML”转换为 XHTML(或者当您无法信任“假定的 XHTML”时)。请参阅cleanRepair 方法。它需要更多时间,但运行大文件(!)...Set some minutes as maximum execution time 如果太大。

另一个选项(用于处理大文件)是在检查或转换成 XHTML 后缓存您的 XHTML 文件。请参阅 Tidy 的 repairfile 方法。

使用“受信任的 XHTML”,使用 SAX...如何将 SAX 与 PHP 一起使用?

用SAX standard API解析XML,在PHP中由LibXML实现(参见LibXML2xmlsoft.org),它的接口是PHP's XML Parser,它靠近SAX 标准 API。

使用“LibXML2 的 SAX”的另一种方法是使用 XMLReader,并使用另一个接口(@98​​7654329@ 而不是传统的 SAX 接口)。见this explanation about "XMLReader use SAX"。


是的,术语“SAX”或“SAX API”未在 PHP 手册中表达 (!!)。见this old but good introduction。

【讨论】:

    【解决方案2】:

    我可以在这里推荐梨包:http://pear.php.net/package/XML_HTMLSax/redirected

    【讨论】:

      【解决方案3】:

      尝试使用HTML SAX Parser

      【讨论】:

      • 我试过用它,它不能处理嵌入的js或复杂的样式,因为它是基于正则表达式的。
      • 我用它来解决您要解决的问题。我过滤用户生成的内容,剪切 JavaScript、标签、属性。
      【解决方案4】:

      SAX 处理有效的 XML 并在无效标记上失败。处理无效的 HTML 标记需要保持比 SAX 解析器通常保持的更多状态。

      我不知道有任何类似 SAX 的 HTML 解析器。最好的办法是先通过 tidy 传递 HTML,然后使用 XML 解析器,但这可能会破坏您最初使用 SAX 解析器的目的。

      【讨论】:

      • 即使是整齐的 HTML 片段也无效。它们是这样的:some comment with <b>bold text</b>, <i>italic text</i>. 对于任何 XML 解析器来说,它都是无效的文档。没有根,但我不想用一些根元素来包装内容。
      • @Daniel 为什么首先需要一个事件处理程序。如果 HTML sn-ps 很短,我认为没有令人信服的理由。
      • @Daniel 抱歉,我指的是事件驱动的 API,例如 SAX。
      • 哦,我已经用 SAX 解析器实现了,它非常高效和简单,但它的问题是 SAX 解析器本身。它使用正则表达式来解析 HTML :(
      • @Daniel 使用正则表达式解析 HTML => 麻烦
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多