Start · Sprachen · PHP · Referenz · ob_iconv_handler

ob_iconv_handler

Funktion

Konvertiert die Zeichenkodierung des Ausgabepuffers von der internen auf die Ausgabe-Kodierung mittels iconv.

seit PHP 4.0.5 Kategorie: string

Signatur

ob_iconv_handler(string $contents, int $status): string

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

Typ
string
Beschreibung
Gibt den in die Zielkodierung konvertierten Inhalt als Zeichenkette zurück. Bei einem Fehler bei der Konvertierung wird 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();
Hallo Welt! Ä Ö Ü ß (als ISO-8859-1 kodierte Bytes)

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.';
}
Konvertierung erfolgreich. Länge: 19 Bytes

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