W3docs

html_entity_decode()

Unser Artikel behandelt die PHP-Funktion html_entity_decode(), die HTML-Entities in ihre entsprechenden Zeichen umwandelt.

Die PHP-Funktion html_entity_decode() wandelt HTML-Entities (wie &lt;, &amp; oder &copy;) in ihre entsprechenden Zeichen zurück (<, &, ©). Sie ist das Gegenstück zu htmlentities() und kommt immer dann zum Einsatz, wenn bereits kodiertes HTML in lesbaren Text umgewandelt werden muss — zum Beispiel beim Lesen von Daten, die in kodierter Form gespeichert wurden, oder bei der Verarbeitung der Ausgabe eines Systems, das sein HTML escaped hat.

Diese Seite erläutert die Syntax, alle Parameter, die Flags zur Steuerung der Anführungszeichen-Behandlung sowie häufige Fallstricke (insbesondere in Bezug auf Sicherheit).

Syntax

html_entity_decode(
    string $string,
    int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null
): string
ParameterErforderlichBeschreibung
$stringJaDer Eingabe-String mit den zu dekodierenden HTML-Entities.
$flagsNeinEine Bitmaske, die steuert, welche Anführungszeichen dekodiert werden und welcher Dokumenttyp angenommen wird.
$encodingNeinDie Zeichenkodierung der Eingabe. Standardmäßig wird die ini-Einstellung default_charset verwendet (UTF-8 bei modernem PHP).

Die Funktion gibt den dekodierten String zurück. Seit PHP 8.1 ist der Standardwert für $flags ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401; ältere Versionen verwendeten standardmäßig ENT_COMPAT | ENT_HTML401.

Grundlegendes Beispiel

php— editable, runs on the server

Die Entities &lt; und &gt; werden in < und > zurückverwandelt, sodass die Ausgabe lautet:

<h1>Hello World</h1>

Anführungszeichen mit $flags steuern

Der Parameter $flags legt fest, wie einfache und doppelte Anführungszeichen behandelt werden:

FlagDekodiert
ENT_COMPATNur doppelte Anführungszeichen
ENT_QUOTESSowohl einfache als auch doppelte Anführungszeichen
ENT_NOQUOTESWeder einfache noch doppelte Anführungszeichen

Fügen Sie ENT_HTML401, ENT_HTML5, ENT_XML1 oder ENT_XHTML hinzu, um den Entity-Satz auszuwählen, und ENT_SUBSTITUTE/ENT_IGNORE, um den Umgang mit ungültigen Byte-Sequenzen zu steuern. Verwenden Sie ENT_QUOTES, wenn die Eingabe kodierte einfache Anführungszeichen enthalten kann (&#039; / &apos;):

php— editable, runs on the server

Mit ENT_QUOTES werden sowohl die Tags als auch das kodierte einfache Anführungszeichen wiederhergestellt:

<p>I'm a paragraph</p>

Zeichenkodierung angeben

Der dritte Parameter, $encoding, teilt PHP mit, wie die Eingabe-Bytes zu interpretieren sind. Standardmäßig wird die ini-Einstellung default_charset verwendet. Geben Sie ihn explizit an, wenn Sie sich nicht auf diesen Standard verlassen können — in den meisten Fällen "UTF-8":

php— editable, runs on the server

ENT_HTML5 ermöglicht es PHP, den vollständigen Satz benannter HTML5-Entities zu erkennen, sodass &eacute; und &amp; dekodiert werden zu:

Café & Co.

Sicherheit: nicht vor der Ausgabe dekodieren

html_entity_decode() ist das Gegenteil von Escaping. Wenn benutzerseitig gelieferter Inhalt dekodiert und dann in eine Seite ausgegeben wird, werden alle <script>-Tags oder Attribute wieder eingeführt, die das Escaping entfernt hatte — dadurch entsteht eine XSS-Lücke. Dekodieren Sie nur dann, wenn Sie die rohen Zeichen für Nicht-HTML-Zwecke benötigen (Logging, Vergleiche, Erstellen einer Nur-Text-Version, Generieren eines PDFs usw.). Wenn Sie in HTML ausgeben, lassen Sie die Daten escaped.

Verwandte Funktionen

  • htmlentities() — das Gegenstück: wandelt Zeichen in HTML-Entities um.
  • htmlspecialchars() — escaped nur die fünf speziellen HTML-Zeichen (<, >, &, ", ').
  • htmlspecialchars_decode() — kehrt htmlspecialchars() um; schneller als html_entity_decode(), wenn nur diese fünf Zeichen zurückkonvertiert werden müssen.

html_entity_decode() verarbeitet den vollständigen benannten Entity-Satz. Verwenden Sie diese Funktion, wenn die Eingabe Entities wie &copy; oder &eacute; enthalten kann; greifen Sie auf htmlspecialchars_decode() zurück, wenn die Ausgabe ausschließlich mit htmlspecialchars() erzeugt wurde.

Übungen

Übung
Was macht die Funktion `html_entity_decode()` in PHP?
Was macht die Funktion `html_entity_decode()` in PHP?
Was this page helpful?