Signatur
Beschreibung
utf8_encode() wandelt eine Zeichenkette, die im ISO-8859-1-Zeichensatz (Latin-1) kodiert ist, in die UTF-8-Darstellung um. Jedes Byte im Eingabestring wird dabei gemäß der Latin-1-zu-UTF-8-Abbildung konvertiert. Die Funktion eignet sich für einfache Migrationsszenarios, in denen Daten aus alten Systemen oder Datenbanken, die noch Latin-1 verwenden, in modernes UTF-8 überführt werden müssen.
Wichtig: Die Funktion behandelt den Eingabe-String immer als ISO-8859-1, unabhängig davon, welche tatsächliche Kodierung vorliegt. Falls der String bereits UTF-8 oder eine andere Kodierung verwendet, führt utf8_encode() zu falschen Ergebnissen (doppelte Kodierung, Mojibake).
Für komplexere Konvertierungen zwischen beliebigen Zeichensätzen sollte stattdessen mb_convert_encoding() oder iconv() verwendet werden, da diese flexibler und präziser sind.
Deprecated seit PHP 8.2: Die Funktion wurde in PHP 8.2 als veraltet markiert und wird in einer zukünftigen PHP-Version entfernt. Als Ersatz empfiehlt das PHP-Projekt mb_convert_encoding($string, 'UTF-8', 'ISO-8859-1').
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Die zu konvertierende Zeichenkette im ISO-8859-1-Format. |
Rückgabewert
Beispiele
Einfache Latin-1-Zeichenkette nach UTF-8 konvertieren
<?php
$latin1 = "Sch\xF6ne Gr\xFC\xDFe aus M\xFCnchen";
// \xF6 = ö, \xFC = ü, \xDF = ß in ISO-8859-1
$utf8 = utf8_encode($latin1);
echo $utf8; // Gibt korrekt dargestellte UTF-8-Zeichen aus
echo "\n";
echo mb_detect_encoding($utf8); // UTF-8
Migration von Latin-1-Datenbankdaten
<?php
// Simuliert Daten aus einer alten ISO-8859-1-Datenbank
$rows = [
["name" => "M\xFCller", "city" => "K\xF6ln"],
["name" => "Sch\xE4fer", "city" => "D\xFCsseldorf"],
];
$converted = array_map(function (array $row): array {
return array_map('utf8_encode', $row);
}, $rows);
foreach ($converted as $row) {
echo $row['name'] . ' aus ' . $row['city'] . "\n";
}
Empfohlener Ersatz mit mb_convert_encoding (PHP 8.2+)
<?php
// Seit PHP 8.2 ist utf8_encode() deprecated.
// Empfohlener Ersatz:
$latin1 = "\xE4\xF6\xFC\xDF"; // äöüß in ISO-8859-1
$utf8 = mb_convert_encoding($latin1, 'UTF-8', 'ISO-8859-1');
echo $utf8; // äöüß in UTF-8
// Wichtig · Fallstricke
Deprecated ab PHP 8.2: utf8_encode() wurde in PHP 8.2 als veraltet markiert (Deprecation Notice) und sollte nicht mehr in neuem Code verwendet werden. Verwende stattdessen mb_convert_encoding($string, 'UTF-8', 'ISO-8859-1') oder iconv('ISO-8859-1', 'UTF-8', $string).
Doppelte Kodierung vermeiden: Wenn ein String bereits UTF-8 kodiert ist und erneut durch utf8_encode() geleitet wird, entsteht eine fehlerhafte doppelte UTF-8-Kodierung (Mojibake). Überprüfe vor der Konvertierung die tatsächliche Kodierung, z. B. mit mb_detect_encoding().
Nur Latin-1: Die Funktion unterstützt ausschließlich ISO-8859-1 als Quellkodierung. Für andere Kodierungen wie ISO-8859-2, Windows-1252 oder CP850 sind mb_convert_encoding() oder iconv() zwingend erforderlich.