Start · Sprachen · PHP · Referenz · mb_output_handler

mb_output_handler

Funktion

Callback-Funktion für <code>ob_start()</code>, die den Ausgabepuffer automatisch in die gewünschte HTTP-Ausgabekodierung konvertiert.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_output_handler(string $output_string, int $status): string

Beschreibung

mb_output_handler() ist eine speziell für den PHP-Ausgabepuffer konzipierte Callback-Funktion. Sie wird als Argument an ob_start() übergeben und wandelt den Inhalt des Ausgabepuffers automatisch von der internen Zeichenkodierung (konfiguriert über mb_internal_encoding()) in die gewünschte Ausgabekodierung (konfiguriert über mb_http_output()) um.

Zusätzlich zur Zeichenkodierungskonvertierung setzt die Funktion automatisch den HTTP-Header Content-Type mit dem korrekten Charset-Parameter, sofern dieser noch nicht gesendet wurde und der Content-Type text/* ist. Dies vereinfacht die korrekte Deklaration der Ausgabekodierung erheblich.

Typischer Einsatzfall ist eine Anwendung, die intern mit UTF-8 oder einer anderen Multibyte-Kodierung arbeitet, die Ausgabe jedoch für ältere Clients oder spezifische Anforderungen in eine andere Kodierung wie ISO-8859-1 oder EUC-JP konvertieren muss. Durch den Einsatz im Ausgabepuffer muss die Konvertierung nicht manuell an jeder Ausgabestelle durchgeführt werden.

Wichtig: Die Funktion ist nicht für den direkten Aufruf im Anwendungscode gedacht, sondern ausschließlich als Callback-Parameter für ob_start(). Eine manuelle Verwendung außerhalb dieses Kontexts ist möglich, aber unüblich.

Parameter

Name Typ Default Beschreibung
$output_string Pflicht string Der Inhalt des Ausgabepuffers, der konvertiert werden soll. Wird automatisch von ob_start() übergeben.
$status Pflicht int Ein Statusflag, das den aktuellen Zustand des Ausgabepuffers angibt (z. B. PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT, PHP_OUTPUT_HANDLER_END). Wird automatisch von ob_start() übergeben.

Rückgabewert

Typ
string
Beschreibung
Gibt den konvertierten Ausgabestring zurück. Die Zeichenkodierung wird entsprechend der mit mb_http_output() konfigurierten Ausgabekodierung angepasst.

Beispiele

Ausgabepuffer mit automatischer Kodierungskonvertierung aktivieren

<?php
// Interne Kodierung auf UTF-8 setzen
mb_internal_encoding('UTF-8');

// Ausgabekodierung auf ISO-8859-1 setzen
mb_http_output('ISO-8859-1');

// Ausgabepuffer mit mb_output_handler als Callback starten
ob_start('mb_output_handler');

// Inhalt wird intern als UTF-8 behandelt
echo 'Hallo Welt! Ä Ö Ü';

// Puffer wird bei ob_end_flush() automatisch in ISO-8859-1 konvertiert
ob_end_flush();
Hallo Welt! Ä Ö Ü (als ISO-8859-1 kodiert gesendet, mit passendem Content-Type-Header)

Einsatz in einer mehrsprachigen Webanwendung mit EUC-JP

<?php
// Interne Kodierung auf UTF-8
mb_internal_encoding('UTF-8');

// Ausgabe soll in EUC-JP erfolgen (z. B. für ältere japanische Clients)
mb_http_output('EUC-JP');

// Ausgabepuffer starten
ob_start('mb_output_handler');

// Japanischer Text in UTF-8 intern verarbeiten
$text = '日本語のテキスト';
echo '<html><head></head><body>' . $text . '</body></html>';

// Gibt automatisch EUC-JP-kodierten Inhalt aus
// und setzt: Content-Type: text/html; charset=EUC-JP
ob_end_flush();
HTML-Seite mit EUC-JP-Kodierung und entsprechendem Content-Type-Header

// Wichtig · Fallstricke

Content-Type-Header: Der Header wird nur dann automatisch gesetzt, wenn der MIME-Typ der Antwort mit text/ beginnt und noch kein Content-Type-Header gesendet wurde. Bei binären Inhalten oder bereits gesendeten Headern hat diese Funktion keinen Einfluss auf die Header.

Keine direkte Nutzung: Die Funktion ist ausschließlich als ob_start()-Callback konzipiert. Ein direkter Aufruf im eigenen Code ist technisch möglich, entspricht aber nicht dem vorgesehenen Verwendungsmuster.

Kodierungskompatibilität: Stellen Sie sicher, dass die gewählten Kodierungen von der Mbstring-Erweiterung unterstützt werden. Nicht alle Zeichen können verlustfrei zwischen beliebigen Kodierungen konvertiert werden. Zeichen ohne Entsprechung in der Zielkodierung können verloren gehen.