W3docs

utf8_encode()

Die Funktion utf8_encode() ist eine eingebaute PHP-Funktion, die einen String von ISO-8859-1-Kodierung in UTF-8-Kodierung umwandelt.

Die Funktion utf8_encode() ist eine eingebaute PHP-Funktion, die einen String von ISO-8859-1 (Latin-1) nach UTF-8 konvertiert. Sie ist nützlich, wenn Sie Latin-1-Text empfangen — aus einer veralteten Datenbank, einer Datei oder einer alten API — und diesen korrekt in einem System anzeigen müssen, das UTF-8 erwartet.

Diese Seite erklärt, was die Funktion tut, wie sie auf Byte-Ebene funktioniert, wann (und wann nicht) sie verwendet werden sollte, und welche modernen Alternativen in aktuellen PHP-Versionen bevorzugt werden sollten.

Veraltet, dann entfernt. utf8_encode() wurde in PHP 8.2 als veraltet markiert und in PHP 8.3 entfernt. Neuer Code sollte stattdessen mb_convert_encoding() oder iconv() verwenden — siehe Moderne Alternativen unten. Diese Seite dokumentiert die veraltete Funktion für die vielen Codebasen, die sich noch darauf stützen.

Was „Kodierung" hier bedeutet

Eine Zeichenkodierung ist eine Zuordnung zwischen Zeichen und den Bytes, die sie repräsentieren. ISO-8859-1 ist eine Ein-Byte-Kodierung: Jedes Zeichen ist genau ein Byte (256 mögliche Werte), was westeuropäische Buchstaben wie é, ñ und ü abdeckt. UTF-8 ist eine variabel breite Kodierung, bei der dieselben Akzentzeichen zwei Bytes benötigen.

utf8_encode() erledigt eine bestimmte Aufgabe: Es liest jedes Byte der Eingabe als ISO-8859-1-Codepunkt und schreibt es als entsprechende UTF-8-Bytesequenz um. Es erkennt die Eingabekodierung nicht — es geht immer davon aus, dass die Eingabe ISO-8859-1 ist. Wenn Sie einen String übergeben, der bereits UTF-8 ist, erhalten Sie verstümmeltes „Mojibake" (doppelt kodierte) Ausgabe.

Syntax

utf8_encode(string $string): string
ParameterBeschreibung
$stringDer ISO-8859-1 (Latin-1) kodierte String, der konvertiert werden soll.

Rückgabewert: derselbe Text, neu kodiert als UTF-8.

Verwendungsbeispiele

Sehen wir uns einige praktische Beispiele für die Verwendung von utf8_encode() in PHP an.

Beispiel 1: ISO-8859-1-Text in UTF-8 konvertieren

Angenommen, Sie haben einen String mit ISO-8859-1-Kodierung, den Sie in UTF-8 konvertieren möchten. Sie können dafür utf8_encode() verwenden:

php— editable, runs on the server

Dieser Code definiert eine String-Variable $text mit ISO-8859-1-Text, konvertiert ihn mit utf8_encode() in UTF-8 und gibt das Ergebnis aus. Beachten Sie den Hinweis im Kommentar: Der Quell-String muss tatsächlich als ISO-8859-1 vorliegen. Wenn Ihr Editor die Datei als UTF-8 speichert, besteht das é bereits aus zwei Bytes, und utf8_encode() wandelt es fehlerhaft in é um.

Beispiel 2: Die Änderung auf Byte-Ebene sehen

Um die Konvertierung anschaulich zu machen, untersuchen Sie die Byte-Länge vor und nach der Umwandlung. Das Akzentzeichen wächst von einem Byte auf zwei:

<?php
$latin1 = "\xE9";            // a single byte: 'é' in ISO-8859-1
echo strlen($latin1);        // 1
$utf8 = utf8_encode($latin1);
echo strlen($utf8);          // 2  -> the bytes 0xC3 0xA9
echo bin2hex($utf8);         // c3a9
?>

strlen() zählt Bytes, keine Zeichen, daher meldet derselbe Buchstabe eine Länge von 1 in Latin-1 und 2 in UTF-8. Diese Ausdehnung von einem auf zwei Bytes ist genau das, was dafür sorgt, dass der konvertierte Text in einem UTF-8-Kontext korrekt dargestellt wird.

Beispiel 3: ISO-8859-1-kodierten Text aus XML konvertieren

Angenommen, Sie haben eine als ISO-8859-1 deklarierte XML-Datei, die Sie lesen und in UTF-8 konvertieren möchten. Sie können die SimpleXML-Bibliothek verwenden, um die Datei zu lesen, und utf8_encode(), um jeden Wert zu konvertieren:

<?php
$xml = simplexml_load_file("data.xml");
foreach ($xml->item as $item) {
  $title = utf8_encode($item->title);
  $description = utf8_encode($item->description);
  echo "$title: $description\n";
}
?>

Dieser Code lädt eine als ISO-8859-1 deklarierte XML-Datei mit simplexml_load_file(), iteriert über jedes <item>-Element und konvertiert den Text von <title> und <description> in UTF-8, bevor er ausgegeben wird. (Die SimpleXMLElement-Werte werden durch utf8_encode() in Strings umgewandelt.)

Wann es verwendet werden sollte (und wann nicht)

Verwenden Sie utf8_encode() nur, wenn alle folgenden Bedingungen zutreffen:

  • Die Eingabe ist wirklich ISO-8859-1 / Latin-1 (nicht Windows-1252, nicht bereits UTF-8).
  • Sie verwenden PHP 8.2 oder früher, wo die Funktion noch existiert.
  • Sie möchten eine schnelle, abhängigkeitsfreie Latin-1 → UTF-8-Konvertierung.

Vermeiden Sie es, wenn:

  • Die Quelle möglicherweise Windows-1252 ist (üblich bei Text aus Windows / Excel). Windows-1252 verwendet den Bereich 0x80–0x9F für Zeichen wie und geschweifte Anführungszeichen, die ISO-8859-1 undefiniert lässt — diese gehen verloren oder werden falsch dargestellt. Verwenden Sie stattdessen mb_convert_encoding($s, 'UTF-8', 'Windows-1252').
  • Sie die Eingabekodierung nicht kennen. Erkennen oder deklarieren Sie sie explizit, anstatt zu raten.
  • Sie PHP 8.3+ als Ziel haben, wo die Funktion vollständig entfernt wurde.

Moderne Alternativen

Da utf8_encode() in PHP 8.3 entfernt wurde, bevorzugen Sie die Multibyte-String- oder iconv-Funktionen, bei denen Sie die Quellkodierung explizit angeben können:

<?php
$latin1 = "\xE9"; // 'é' in ISO-8859-1

// mbstring extension (recommended)
$utf8 = mb_convert_encoding($latin1, 'UTF-8', 'ISO-8859-1');

// iconv extension
$utf8 = iconv('ISO-8859-1', 'UTF-8', $latin1);

echo bin2hex($utf8); // c3a9 in both cases
?>

Beide erzeugen dieselben zwei Bytes (0xC3 0xA9) wie utf8_encode(), aber sie machen die Quellkodierung zum Teil des Aufrufs — daher funktionieren sie auch für Windows-1252, ISO-8859-15 und Dutzende anderer Kodierungen.

Verwandte Funktionen

  • utf8_decode() — die Umkehrung: UTF-8 zurück in ISO-8859-1 konvertieren.
  • json_encode() — erzeugt UTF-8-Ausgabe und maskiert Multibyte-Zeichen.
  • PHP Strings — Überblick über die Arbeit mit Text in PHP.

Fazit

utf8_encode() konvertiert ISO-8859-1 (Latin-1)-Text in UTF-8, indem jedes Byte neu kodiert wird — dabei werden Ein-Byte-Akzentzeichen in ihre zwei-Byte-UTF-8-Form umgewandelt. Die Funktion ist praktisch, ignoriert aber die tatsächliche Eingabekodierung und ist in PHP 8.2 als veraltet markiert sowie in PHP 8.3 entfernt worden. Für neuen Code sollten Sie mb_convert_encoding() oder iconv() verwenden, die es ermöglichen, die Quellkodierung explizit anzugeben und eine weit größere Bandbreite von Zeichensätzen zu verarbeiten.

Übungen

Übung
Was ist der Zweck der Funktion utf8_encode() in PHP?
Was ist der Zweck der Funktion utf8_encode() in PHP?
Was this page helpful?