Start · Sprachen · PHP · Referenz · tidy

tidy

Klasse

Repräsentiert ein HTML-Dokument, das von der Tidy-Bibliothek eingelesen und bereinigt wurde, und bietet Methoden zum Parsen, Reparieren und Ausgeben von HTML/XHTML.

seit PHP 5.0.0 Kategorie: string

Signatur

class tidy

Beschreibung

Die Klasse tidy ist eine objektorientierte Schnittstelle zur HTML Tidy-Bibliothek. Sie ermöglicht das Einlesen, Validieren, Reparieren und Ausgeben von fehlerhaftem oder ungültigem HTML- und XHTML-Code. Typische Anwendungsfälle sind das Säubern von nutzergeneriertem HTML-Inhalt, das Normalisieren von HTML-Ausgaben und das Vorbereiten von HTML für die weitere Verarbeitung.

Mit tidy können sowohl Strings als auch Dateien als Eingabequelle genutzt werden. Die Klasse bietet Zugriff auf den bereinigten HTML-Code, auf Fehler- und Warnmeldungen sowie auf den internen Dokumentbaum über tidyNode-Objekte.

Die Klasse wird über die Tidy-Extension bereitgestellt, die bei PHP in der Regel als optionale Erweiterung kompiliert wird (--with-tidy). Konfigurationsoptionen wie output-xhtml, indent oder wrap lassen sich über ein Array oder eine Konfigurationsdatei steuern.

Besonders nützlich ist tidy in Content-Management-Systemen, E-Mail-Generatoren oder überall dort, wo HTML aus externen Quellen übernommen und in ein wohlgeformtes Format gebracht werden muss.

Parameter

Name Typ Default Beschreibung
$input string|null null Optionaler HTML-String oder Dateipfad, der beim Erzeugen des Objekts direkt geparst werden soll. Wird null übergeben oder weggelassen, muss das Parsen manuell via parseString() oder parseFile() ausgelöst werden.
$config array|string|null null Tidy-Konfiguration als assoziatives Array (z. B. ['indent' => true, 'output-xhtml' => true]) oder als Pfad zu einer Tidy-Konfigurationsdatei. null verwendet die Standardkonfiguration.
$encoding string|null null Zeichenkodierung der Eingabe, z. B. 'utf8', 'latin1' oder 'ascii'. Tidy-spezifische Kodierungsnamen weichen von PHP-Standard-Kodierungsnamen ab.
$useIncludePath bool false Falls true, wird bei Dateinamen der PHP-Include-Pfad zur Dateisuche herangezogen (nur relevant, wenn input ein Dateipfad ist).

Rückgabewert

Typ

Beispiele

HTML-String bereinigen und ausgeben

<?php
$html = '<html><head><title>Test</title></head><body><p>Hallo <b>Welt</p></b></body></html>';

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

echo $tidy;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="generator" content= "HTML Tidy for Linux (vers ...), see www.w3.org" /> <title>Test</title> </head> <body> <p>Hallo <b>Welt</b></p> </body> </html>

Fehler und Warnungen nach dem Parsen auswerten

<?php
$html = '<p>Fehlerhafter <b>HTML<p>Zweiter Absatz</p>';

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

if ($tidy->errorBuffer) {
    echo "Tidy-Meldungen:\n";
    echo $tidy->errorBuffer . "\n";
}

echo "Bereinigtes HTML:\n";
echo $tidy->body()->value;
Tidy-Meldungen: line 1 column 1 - Warning: missing <!DOCTYPE> declaration ... Bereinigtes HTML: <body> <p>Fehlerhafter <b>HTML</b></p> <p>Zweiter Absatz</p> </body>

HTML-Datei einlesen und reparieren

<?php
$tidy = new tidy();
$tidy->parseFile('/var/www/html/seite.html', ['indent' => true], 'utf8');
$tidy->cleanRepair();

// Repariertes HTML in neue Datei schreiben
file_put_contents('/var/www/html/seite_clean.html', (string) $tidy);
echo "Datei wurde bereinigt und gespeichert.\n";
Datei wurde bereinigt und gespeichert.

// Wichtig · Fallstricke

Konfigurationsnamen: Tidy verwendet eigene Konfigurationsschlüssel (z. B. output-xhtml statt outputXhtml). Die vollständige Liste ist in der offiziellen Tidy-Dokumentation zu finden.

Zeichenkodierung: Die Kodierungsangabe bei Tidy weicht von PHP-Standardnamen ab. 'utf8' (ohne Bindestrich!) ist korrekt, nicht 'utf-8'.

Sicherheit: Tidy bereinigt HTML syntaktisch, ist aber kein vollständiger XSS-Schutz. Für Sicherheitszwecke sollte zusätzlich eine dedizierte HTML-Sanitizer-Bibliothek (z. B. HTMLPurifier) eingesetzt werden.

Extension erforderlich: Die tidy-Klasse steht nur zur Verfügung, wenn PHP mit --with-tidy kompiliert wurde oder die Erweiterung als dynamisches Modul (extension=tidy) geladen ist.