我需要一个能够处理无效HTML代码的PHP HTML SAX(而非DOM)解析器。我需要它来过滤用户输入的HTML(删除除允许标签和属性之外的所有标签和属性),并将HTML内容截断到指定长度。
有什么好的建议吗?
有什么好的建议吗?
SAX被设计用来处理有效的XML并在无效的标记上失败。处理无效的HTML标记需要保持比SAX解析器通常保持更多的状态。
我不知道是否有类似于SAX的HTML解析器。你最好先使用Tidy对HTML进行清理,然后再使用XML解析器,但这可能会挫败你一开始使用SAX解析器的目的。
some comment with <b>bold text</b>, <i>italic text</i>.
对于任何 XML 解析器来说,这都是无效的文档。它没有根元素,但我不想用某个根元素包装内容。 - Daniel总的来说,包含两个步骤:
使用首先Tidy(!)将"自由HTML"转换为XHTML(或者当您不能信任您的"所谓XHTML"时)。请参见cleanRepair方法。它需要更多时间,但可以处理大文件(!)...如果太大,请设置几分钟作为最大执行时间。
另一种选项(用于处理大文件)是在检查或转换为XHTML后缓存您的XHTML文件。请参见Tidy的repairfile方法。
对于一个"可信的XHTML",使用SAX...如何在PHP中使用SAX?
使用SAX标准API解析XML,在PHP中由LibXML实现(请参见xmlsoft.org的LibXML2),其接口是PHP的XML解析器,接近于SAX标准API。是的,术语"SAX"或"SAX API"在PHP手册中没有明确表达。请参见这篇旧但好的介绍。