使用 DOMDocument + DOMXPath 从 HTML 中删除除特定标签和属性之外的所有标签和属性

使用 DOMDocument + DOMXPath 从 HTML 中删除除特定标签和属性之外的所有标签和属性

我有任意的 HTML 主体,需要在 PHP 中处理它以删除除几个“众所周知”的标签之外的所有标签(<h1><h2><h3><h4><ul><ol><li><p><br><a><b><u><i><sup><sub><table><th><tr><td><blockquote>及其结束标签)以及除頁面的属性<一>,并将任何剩余的 HTML 作为字符串返回。我还需要手动删除除 之外的任何 href "(https?|ftp)://.*",但这将是唯一剩下的正则表达式工作。

我不需要检查 HTML 的整体有效性、打开/关闭标签匹配等,HTML 应该是值得信赖的,这主要是为了删除不需要的标签和属性,只留下纯文本和一些最基本的元素。

我首先使用 strstr() 获取正文 HTML,然后使用 strip_tags() 删除除给定标签之外的所有标签,然后使用正则表达式删除除 HREF 之外的所有属性,最后将所有剩余的 < 转换为 <(已知标签除外)作为最后一轮输入清理。但有一条评论建议使用 DOMDocument 和 DOMXPath(而不是正则表达式)进行任何 HTML 处理。

使用正确的工具听起来是个好主意,但我不知道如何使用它们。如何使用它们从hrefHTML 字符串中删除除这些特定元素之外的所有元素,以及从除 in 之外的所有元素中删除所有属性?

更新:这是针对现有第三方项目的建议补丁,如果 HTML Purifier 等软件包尚未存在,我就无法导入它们。我有 PHP DOM 和一些其他 PHP 扩展,但标准 PHP + XML + DOM 处理似乎是我可用的工具包。

相关内容