Signatur
Beschreibung
ob_iconv_handler() ist ein Ausgabepuffer-Handler, der den gepufferten Inhalt automatisch von der internen Zeichenkodierung (iconv.internal_encoding) in die Ausgabe-Zeichenkodierung (iconv.output_encoding) umwandelt. Er wird typischerweise als Callback-Funktion an ob_start() übergeben und nicht direkt aufgerufen.
Die Funktion nutzt die PHP-INI-Einstellungen iconv.internal_encoding (Quellkodierung) und iconv.output_encoding (Zielkodierung). Sind die Kodierungen identisch, wird der Inhalt unverändert zurückgegeben. Schlägt die Konvertierung fehl, wird false zurückgegeben.
Typischer Einsatzfall ist eine Applikation, die intern mit einer bestimmten Zeichenkodierung (z. B. UTF-8) arbeitet, aber Ausgaben in einer anderen Kodierung (z. B. ISO-8859-1 oder EUC-JP) erzeugen muss – etwa für ältere Clients oder Legacy-Systeme.
Beachte, dass iconv.internal_encoding und iconv.output_encoding ab PHP 5.6 als veraltet gelten und durch default_charset ersetzt wurden. In modernen Anwendungen sollte stattdessen direkt mit UTF-8 gearbeitet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $contents Pflicht | string | Der aktuelle Inhalt des Ausgabepuffers, der konvertiert werden soll. | |
| $status Pflicht | int | Status-Flags des Ausgabepuffers (z. B. PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_END). Wird von ob_start() automatisch gesetzt und üblicherweise nicht manuell übergeben. |
Rückgabewert
false zurückgegeben.Beispiele
Ausgabepuffer mit automatischer Kodierungskonvertierung
<?php
// Interne Kodierung auf UTF-8 setzen
ini_set('iconv.internal_encoding', 'UTF-8');
// Ausgabe soll als ISO-8859-1 geliefert werden
ini_set('iconv.output_encoding', 'ISO-8859-1');
// ob_iconv_handler als Puffer-Handler registrieren
ob_start('ob_iconv_handler');
// Dieser UTF-8-Text wird automatisch nach ISO-8859-1 konvertiert
echo "Hallo Welt! Ä Ö Ü ß";
// Puffer leeren und Inhalt senden (bereits konvertiert)
ob_end_flush();
Direkter Aufruf zu Demonstrationszwecken
<?php
ini_set('iconv.internal_encoding', 'UTF-8');
ini_set('iconv.output_encoding', 'ISO-8859-1');
$utf8Text = "Grüße aus München!";
// Direkt aufrufen (normalerweise nur intern durch ob_start genutzt)
$converted = ob_iconv_handler($utf8Text, PHP_OUTPUT_HANDLER_END);
if ($converted !== false) {
echo 'Konvertierung erfolgreich. Länge: ' . strlen($converted) . ' Bytes';
} else {
echo 'Konvertierung fehlgeschlagen.';
}
// Wichtig · Fallstricke
Veraltete INI-Einstellungen: Ab PHP 5.6 sind iconv.internal_encoding und iconv.output_encoding als veraltet markiert. Stattdessen sollte default_charset verwendet werden. In PHP 8.x wurde die Unterstützung dieser INI-Einstellungen weiter eingeschränkt.
Zeichenverlust: Enthält der Quelltext Zeichen, die in der Zielkodierung nicht darstellbar sind, gehen diese verloren oder führen zu einem Fehler. Es empfiehlt sich daher, grundsätzlich durchgängig UTF-8 zu verwenden und Konvertierungen zu vermeiden.
Direkte Verwendung: Die Funktion ist primär als Handler für ob_start() konzipiert. Ein direkter Aufruf ist zwar möglich, aber unüblich und sollte vermieden werden.