Signatur
Beschreibung
recode_file() liest den Inhalt der über $input geöffneten Datei, wandelt ihn gemäß der in $request angegebenen Recode-Zeichensatzkodierung um und schreibt das Ergebnis in die über $output geöffnete Datei. Die Funktion nutzt die GNU-Recode-Bibliothek, die eine Vielzahl von Zeichensatzkodierungen (z. B. ISO-8859-1, UTF-8, ASCII) und Transformationen unterstützt.
Die Recode-Anweisung wird in der Form QuellKodierung..ZielKodierung angegeben, z. B. ISO-8859-1..UTF-8. Es ist auch möglich, Konvertierungsketten (mehrere Kodierungen hintereinander) zu verwenden, wie sie die GNU-Recode-Bibliothek unterstützt.
Im Gegensatz zu recode_string(), die mit Strings arbeitet, ist recode_file() besonders für große Dateien geeignet, da sie direkt mit Datei-Ressourcen arbeitet und kein Einlesen des gesamten Inhalts in den Arbeitsspeicher erfordert.
Hinweis: Die recode-Erweiterung gilt als veraltet und wurde ab PHP 7.4 als deprecated markiert. Ab PHP 8.0 ist sie nicht mehr Bestandteil des PHP-Kerns und muss als PECL-Erweiterung separat installiert werden. Als moderne Alternative wird mb_convert_encoding() oder iconv() empfohlen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $request Pflicht | string | Die Recode-Anweisung, die die Quell- und Zielkodierung beschreibt, z. B. ISO-8859-1..UTF-8. Die Syntax entspricht der GNU-Recode-Bibliothek. |
|
| $input Pflicht | resource | Eine geöffnete Datei-Ressource (fopen()), aus der der zu kodierende Inhalt gelesen wird. |
|
| $output Pflicht | resource | Eine geöffnete Datei-Ressource (fopen()), in die der umkodierte Inhalt geschrieben wird. |
Rückgabewert
true zurück, wenn die Umkodierung erfolgreich war, andernfalls false.Beispiele
ISO-8859-1-Datei nach UTF-8 konvertieren
<?php
// Quelldatei im ISO-8859-1-Format öffnen
$input = fopen('eingabe_latin1.txt', 'r');
// Zieldatei zum Schreiben öffnen
$output = fopen('ausgabe_utf8.txt', 'w');
if ($input === false || $output === false) {
die('Datei konnte nicht geöffnet werden.');
}
// Umkodierung von ISO-8859-1 nach UTF-8
$result = recode_file('ISO-8859-1..UTF-8', $input, $output);
if ($result) {
echo 'Datei erfolgreich umkodiert.';
} else {
echo 'Fehler bei der Umkodierung.';
}
fclose($input);
fclose($output);
?>
Moderne Alternative mit iconv (empfohlen ab PHP 8.0)
<?php
// Empfohlene Alternative zu recode_file() ab PHP 8.0
$inputFile = 'eingabe_latin1.txt';
$outputFile = 'ausgabe_utf8.txt';
$content = file_get_contents($inputFile);
if ($content === false) {
die('Quelldatei konnte nicht gelesen werden.');
}
$converted = iconv('ISO-8859-1', 'UTF-8', $content);
if ($converted === false) {
die('Konvertierung fehlgeschlagen.');
}
file_put_contents($outputFile, $converted);
echo 'Datei erfolgreich mit iconv umkodiert.';
?>
// Wichtig · Fallstricke
Deprecation: Die recode-Erweiterung wurde in PHP 7.4 als veraltet (deprecated) markiert und ist ab PHP 8.0 nicht mehr im PHP-Kern enthalten. Für neue Projekte sollten stattdessen iconv() oder mb_convert_encoding() verwendet werden.
Voraussetzung: Die GNU-Recode-Bibliothek muss auf dem System installiert und PHP mit der --with-recode-Option kompiliert worden sein. Auf vielen modernen Systemen ist diese Bibliothek nicht mehr standardmäßig verfügbar.
Kompatibilität: Die Recode-Bibliothek kann in manchen Fällen in Konflikt mit anderen Bibliotheken wie iconv oder gettext geraten, was zu unerwarteten Fehlern führen kann.