Start · Sprachen · PHP · Referenz · utf8_encode

utf8_encode

Funktion

Konvertiert eine Zeichenkette von ISO-8859-1 (Latin-1) nach UTF-8.

seit PHP 4.0.0 Kategorie: string

Signatur

utf8_encode(string $string): string

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

Typ
string
Beschreibung
Gibt die UTF-8-kodierte Darstellung der Eingabezeichenkette zurück.

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
Schöne Grüße aus München 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";
}
Müller aus Köln Schäfer aus Düsseldorf

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.