Start · Sprachen · PHP · Referenz · tidy_get_body

tidy_get_body

Funktion

Gibt ein <code>tidyNode</code>-Objekt zurück, das den <code>&lt;body&gt;</code>-Knoten des von Tidy geparsten HTML-Dokuments repräsentiert.

seit PHP 5.0.0 Kategorie: string

Signatur

tidy_get_body(tidy $tidy): tidyNode|null

Beschreibung

tidy_get_body() ist eine prozedurale Hilfsfunktion der Tidy-Erweiterung, die direkt den <body>-Knoten des geparsten HTML-Dokuments liefert. Sie erspart das manuelle Traversieren des gesamten Parsebaums, wenn nur der Inhaltsbereich einer HTML-Seite relevant ist.

Die Funktion gibt ein tidyNode-Objekt zurück, über das rekursiv alle Kind-Knoten des <body>-Elements durchlaufen werden können. Dies ist besonders nützlich, wenn man gezielt den sichtbaren Seiteninhalt analysieren, bereinigen oder extrahieren möchte, ohne den <head>-Bereich einzubeziehen.

Die objektorientierte Entsprechung dieser Funktion ist die Methode tidy::body(), die identisch verwendet werden kann. Beide Formen sind funktional gleichwertig und es empfiehlt sich, die OOP-Variante in modernem PHP-Code zu bevorzugen.

Gibt null zurück, wenn das Dokument keinen <body>-Knoten enthält oder noch kein Dokument geparst wurde.

Parameter

Name Typ Default Beschreibung
$tidy Pflicht tidy Eine gültige tidy-Objekt-Instanz, die ein bereits gepartes HTML-/XHTML-Dokument enthält.

Rückgabewert

Typ
tidyNode|null
Beschreibung
Gibt ein tidyNode-Objekt zurück, das den <body>-Knoten des Dokuments repräsentiert, oder null, wenn kein <body>-Knoten vorhanden ist.

Beispiele

Body-Knoten eines HTML-Dokuments ausgeben

<?php
$html = <<<HTML
<!DOCTYPE html>
<html>
<head><title>Testseite</title></head>
<body>
  <h1>Willkommen</h1>
  <p>Dies ist ein Absatz.</p>
</body>
</html>
HTML;

$tidy = new tidy();
$tidy->parseString($html, [], 'utf8');
$tidy->cleanRepair();

$bodyNode = tidy_get_body($tidy);

if ($bodyNode !== null) {
    echo $bodyNode->value;
} else {
    echo 'Kein body-Element gefunden.';
}
<body> <h1>Willkommen</h1> <p>Dies ist ein Absatz.</p> </body>

Rekursives Traversieren der Body-Kindknoten

<?php
$html = '<html><body><p>Erster Absatz</p><p>Zweiter Absatz</p></body></html>';

$tidy = new tidy();
$tidy->parseString($html, [], 'utf8');
$tidy->cleanRepair();

$bodyNode = tidy_get_body($tidy);

function printNodes(tidyNode $node, int $depth = 0): void {
    echo str_repeat('  ', $depth) . $node->name . PHP_EOL;
    if (!empty($node->child)) {
        foreach ($node->child as $child) {
            printNodes($child, $depth + 1);
        }
    }
}

if ($bodyNode !== null) {
    printNodes($bodyNode);
}
body p #text p #text

// Wichtig · Fallstricke

Hinweis zur OOP-Alternative: In modernem PHP-Code sollte die Methode tidy::body() bevorzugt werden, da prozedurale Tidy-Funktionen als veraltet gelten können und die OOP-Schnittstelle konsistenter ist.

Voraussetzung: Das Tidy-Dokument muss vor dem Aufruf mit tidy::parseString(), tidy::parseFile() oder einer analogen prozeduralen Funktion geparst worden sein. Andernfalls kann null zurückgegeben werden.

Erweiterung: Die Tidy-Erweiterung muss in der PHP-Installation aktiviert sein (extension=tidy in der php.ini). Sie ist nicht standardmäßig aktiv.