Start · Sprachen · PHP · Referenz · tidy_repair_string

tidy_repair_string

Funktion

Repariert und bereinigt einen HTML/XHTML-String mithilfe von Tidy und gibt den korrigierten Markup-String zurück.

seit PHP 5.0.0 Kategorie: string

Signatur

tidy_repair_string(string $string, array|string $config = [], string $encoding = 'utf8'): string|false

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

Typ
string|false
Beschreibung
Gibt den reparierten HTML/XHTML-String zurück. Im Fehlerfall (z. B. wenn Tidy nicht verfügbar ist oder intern ein Fehler auftritt) wird 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.';
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <p>Hallo <b>Welt</b></p> <p>Zweiter Absatz</p> </body> </html>

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');
&lt;p&gt;Hallo Welt!&lt;/p&gt;

// 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.