Signatur
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
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;
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;
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";
// 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.