Start · Sprachen · PHP · Referenz · ob_tidyhandler

ob_tidyhandler

Funktion

Callback-Funktion für <code>ob_start()</code>, die den Inhalt des Ausgabepuffers mit der Tidy-Erweiterung bereinigt und repariert.

seit PHP 5.0.0 Kategorie: string

Signatur

ob_tidyhandler(string $input, int $mode = 0): string

Beschreibung

ob_tidyhandler() ist eine vordefinierte Callback-Funktion, die zusammen mit ob_start() verwendet wird, um den Inhalt des Ausgabepuffers automatisch durch die Tidy-Erweiterung zu bereinigen. Dabei wird das ausgegebene HTML oder XHTML repariert, fehlende Tags ergänzt, falsche Verschachtelungen korrigiert und die Struktur normalisiert.

Die Funktion wird nicht direkt aufgerufen, sondern als Handler an ob_start('ob_tidyhandler') übergeben. Beim Leeren oder Abschluss des Ausgabepuffers übergibt PHP den gepufferten Inhalt automatisch an diese Funktion. Der Parameter $mode wird dabei von PHP intern gesetzt und enthält Flags wie PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT oder PHP_OUTPUT_HANDLER_END.

Die Ausgabe-Bereinigung orientiert sich an den in der php.ini konfigurierten Tidy-Einstellungen (z. B. tidy.default_config und tidy.clean_output). Für feingranulare Kontrolle empfiehlt sich stattdessen die direkte Verwendung der tidy-Klasse oder von tidy_parse_string().

Diese Funktion ist besonders nützlich in Anwendungen, die HTML aus verschiedenen Quellen zusammensetzen und dabei sicherstellen möchten, dass die finale Ausgabe valides, gut strukturiertes Markup enthält – ohne jeden Ausgabe-Abschnitt manuell bereinigen zu müssen.

Parameter

Name Typ Default Beschreibung
$input Pflicht string Der Inhalt des Ausgabepuffers, der bereinigt werden soll. Wird automatisch von PHP beim Aufruf als ob_start()-Callback übergeben.
$mode int 0 Bitmaske mit Ausgabepuffer-Status-Flags (z. B. PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_END). Wird automatisch von PHP gesetzt und muss nicht manuell übergeben werden.

Rückgabewert

Typ
string
Beschreibung
Gibt den durch Tidy bereinigten und reparierten HTML-String zurück. Im Fehlerfall (z. B. wenn Tidy nicht verfügbar ist) wird der originale Eingabe-String unverändert zurückgegeben.

Beispiele

Automatische HTML-Bereinigung mit ob_start

<?php
// Ausgabepuffer mit ob_tidyhandler starten
ob_start('ob_tidyhandler');
?>
<html>
<head><title>Test</title></head>
<body>
<p>Nicht geschlossener Absatz
<p>Zweiter Absatz<br>
<b>Fett ohne schließendes Tag
</body>
</html>
<?php
// Beim Beenden des Puffers wird der Inhalt automatisch durch Tidy bereinigt
ob_end_flush();
?>
<!-- Tidy gibt bereinigtes, valides HTML aus, z. B. mit korrekt geschlossenen Tags -->

Gepufferten Inhalt abrufen und bereinigt ausgeben

<?php
ob_start('ob_tidyhandler');

echo '<html><body>';
echo '<ul><li>Punkt 1<li>Punkt 2</ul>';
echo '<p>Ein <b>fetter</b> Text ohne Fehler';
echo '</body></html>';

// Gepufferten, bereinigten Inhalt abrufen (nicht direkt ausgeben)
$sauberes_html = ob_get_clean();

echo '<!-- Länge des bereinigten HTML: ' . strlen($sauberes_html) . ' Bytes -->' . PHP_EOL;
echo $sauberes_html;
?>
<!-- Länge des bereinigten HTML: (Anzahl Bytes) Bytes --> <!DOCTYPE html> <html> <head> <title></title> </head> <body> <ul> <li>Punkt 1</li> <li>Punkt 2</li> </ul> <p>Ein <b>fetter</b> Text ohne Fehler</p> </body> </html>

// Wichtig · Fallstricke

Voraussetzung: Die Tidy-Erweiterung muss in PHP kompiliert oder als Shared Extension geladen sein (extension=tidy in der php.ini). Ist Tidy nicht verfügbar, erzeugt die Funktion eine Warnung und gibt den unveränderten Pufferinhalt zurück.

Konfiguration: Das Verhalten von ob_tidyhandler wird maßgeblich durch die php.ini-Direktiven tidy.default_config (Pfad zur Tidy-Konfigurationsdatei) und tidy.clean_output gesteuert. Soll tidy.clean_output = On gesetzt werden, aktiviert PHP ob_tidyhandler automatisch als Output-Handler.

Performance: Das vollständige Parsen und Reparieren von HTML durch Tidy ist ressourcenintensiv. In Hochlast-Umgebungen sollte der Einsatz sorgfältig abgewogen werden. Eine gezieltere Alternative ist die direkte Nutzung von tidy_parse_string() nur für kritische Ausgabe-Abschnitte.

Nicht für Binärdaten geeignet: Da Tidy auf HTML/XHTML ausgerichtet ist, sollte ob_tidyhandler niemals für Ausgaben verwendet werden, die Binärdaten, JSON, XML oder andere Nicht-HTML-Formate enthalten.