我正在尝试解析一些 HTML 片段并出于各种原因想要清理它们(XSS 等)。
我目前正在尝试删除任何标签上的所有属性,锚点上的 href 除外。我正在使用一系列 eregi_replace 调用来执行此操作,但我确信使用 preg_replace 和几行代码可以更智能地执行此操作,但我无法让它工作。任何人都可以帮忙吗?
当前代码:
$data_item = eregi_replace("<p[^>]*>","<p>", $data_item);
$data_item = eregi_replace("<h2[^>]*>","<h2>", $data_item);
$data_item = eregi_replace("<h3[^>]*>","<h3>", $data_item);
$data_item = eregi_replace("<h4[^>]*>","<h4>", $data_item);
$data_item = eregi_replace("<h5[^>]*>","<h5>", $data_item);
$data_item = eregi_replace("<h6[^>]*>","<h6>", $data_item);
$data_item = eregi_replace("<ul[^>]*>","<ul>", $data_item);
$data_item = eregi_replace("<ol[^>]*>","<ol>", $data_item);
$data_item = eregi_replace("<li[^>]*>","<li>", $data_item);
$data_item = preg_replace("/<a([^>]*)( href=\S+)([^>]*)>/i", '<a$2 rel="nofollow">', $data_item);
(我只需要解析 HTML 标记的子集,因为在此之前我会去除任何不受欢迎的标记)。