0

可能重复:
通过删除多余/冗余的格式标记来清理 HTML

我一直在尝试删除从 HTML 作曲家生成的冗余标签。这显然无法删除所有空的。我一直在看它一段时间,我无法弄清楚。可能有一些我想念的东西。

下面是代码。非常感谢大家。。

//Check for reduntant tags
function removeRedundantTags($pathname) {
$dom = new DOMDocument();
$dom->loadHTMLFile($pathname);
$allTags = $dom->getElementsByTagName('*');
for($i = 0; $i < $allTags->length; $i++) {
    $currentTag = $allTags->item($i);
    echo "Accessed Tags: ".$currentTag->nodeName.'<br>';
    if($currentTag->hasChildNodes()) continue;
    if($currentTag->nodeName == 'br' || $currentTag->nodeName == 'img' || $currentTag->nodeName == 'meta') continue;
    if($currentTag->nodeValue == NULL) {                        
        $parentNode = $currentTag->parentNode;
        $oldChild = $parentNode->removeChild($currentTag);      
        echo "Removed Tags----: ".$oldChild->nodeName.'<br>';
    }
}   
echo "Redandant Removed<br>";
$dom->saveHTMLFile($pathname);
}

编辑(添加输出)假设我正在尝试清理跨度标签(对不起,我无法发布 HTML 代码)它只是删除了它的一半。就像存在两个跨度标签它只删除一个,并且这同样适用于所有空标签

我正在使用 DOM 结构,它恰好非常快,因为我将使用这段代码处理数百个 HTML 文件。所以有些答案使用了无用的正则表达式。

4

1 回答 1

0
function clean($txt)
{
    $txt=preg_replace("{(<br[\\s]*(>|\/>)\s*){2,}}i", "<br /><br />", $txt);
    $txt=preg_replace("{(<br[\\s]*(>|\/>)\s*)}i", "<br />", $txt);
    return $txt;
}

H9kDroid 在如何使用 PHP 从 HTML 代码中删除多余的 <br /> 标记中回答?

于 2012-05-22T15:30:38.997 回答