Signatur
Beschreibung
tidy_repair_string() ist eine prozedurale Wrapper-Funktion der Tidy-Erweiterung, die einen HTML- oder XHTML-String entgegennimmt, ihn strukturell repariert (fehlende Tags ergänzen, verschachtelte Elemente korrigieren usw.) und den bereinigten String zurückgibt. Im Unterschied zu tidy_repair_file() arbeitet die Funktion direkt auf einem String, ohne eine Datei lesen zu müssen.
Als zweiter Parameter kann entweder ein assoziatives Array mit Tidy-Konfigurationsoptionen (z. B. ['indent' => true, 'output-xhtml' => true]) oder der Pfad zu einer Tidy-Konfigurationsdatei übergeben werden. Wird null oder ein leeres Array übergeben, verwendet Tidy seine internen Standardeinstellungen.
Der dritte Parameter $encoding legt die Zeichenkodierung fest, die Tidy beim Einlesen und Ausgeben des Strings verwenden soll. Typische Werte sind 'utf8', 'latin1' oder 'ascii'. Eine falsche Kodierungsangabe kann zu Datenverlust oder Mojibake führen.
Die Funktion ist besonders nützlich, wenn aus externen Quellen stammender HTML-Code (z. B. von Web-Scraping oder Benutzeringaben) vor der Weiterverarbeitung normalisiert werden soll. Für objektorientierte Verwendung steht die Methode tidy::repairString() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu reparierende HTML- oder XHTML-Quelltext als PHP-String. | |
| $config | array|string | [] | Tidy-Konfigurationsoptionen als assoziatives Array (z. B. ['indent' => true]) oder als Pfad (String) zu einer Tidy-Konfigurationsdatei. Wird null oder ein leeres Array übergeben, gelten die Standardeinstellungen. |
| $encoding | string | utf8 | Zeichenkodierung für Eingabe und Ausgabe, z. B. 'utf8', 'latin1', 'ascii', 'iso2022' oder 'mac'. |
Rückgabewert
false zurückgegeben.Beispiele
Einfache HTML-Reparatur mit Tidy
<?php
$dirty_html = '<html><body><p>Hallo <b>Welt<p>Zweiter Absatz</body>';
$clean_html = tidy_repair_string($dirty_html, [
'indent' => true,
'output-xhtml' => true,
'wrap' => 80,
], 'utf8');
if ($clean_html !== false) {
echo $clean_html;
} else {
echo 'Tidy-Reparatur fehlgeschlagen.';
}
HTML-Fragment bereinigen und XSS-Risiko reduzieren
<?php
// Aus einer externen Quelle stammender, unsauberer HTML-Schnipsel
$user_input = '<p onclick="alert(1)">Hallo <script>alert("xss")</script> Welt!</p>';
$config = [
'output-html' => true,
'drop-proprietary-attributes' => true,
'show-body-only' => true,
'clean' => true,
];
$repaired = tidy_repair_string($user_input, $config, 'utf8');
echo htmlspecialchars($repaired, ENT_QUOTES, 'UTF-8');
// Wichtig · Fallstricke
Sicherheitshinweis: Tidy entfernt zwar viele unsichere Konstrukte (z. B. <script>-Tags), ist aber kein vollständiger XSS-Schutz. Für sicherheitskritische Anwendungen sollte der Output zusätzlich durch eine dedizierte HTML-Sanitizer-Bibliothek (z. B. HTML Purifier) gefiltert und anschließend durch htmlspecialchars() für die Ausgabe kodiert werden.
Die Tidy-Erweiterung muss auf dem Server kompiliert oder als Shared Extension geladen sein (extension=tidy). Ist sie nicht verfügbar, gibt die Funktion false zurück oder erzeugt einen fatalen Fehler. Überprüfe die Verfügbarkeit mit extension_loaded('tidy').
Die Option 'show-body-only' => true ist nützlich, wenn nur ein HTML-Fragment (ohne <html>/<head>/<body>) zurückgegeben werden soll, z. B. beim Einbetten in ein bestehendes Dokument.