W3docs

htmlspecialchars_decode()

Unser Artikel behandelt die PHP-Funktion htmlspecialchars_decode(), die verwendet wird, um HTML-Entitäten in ihre entsprechenden Zeichen umzuwandeln.

Die Funktion htmlspecialchars_decode() macht das Gegenteil von htmlspecialchars(): Sie wandelt die fünf speziellen HTML-Entitäten (&amp;, &lt;, &gt;, &quot;, &#039;) wieder in ihre literalen Zeichen (&, <, >, ", ') zurück.

Sie wird typischerweise benötigt, wenn ein String bereits für die sichere HTML-Ausgabe kodiert wurde und man die rohen Zeichen wieder benötigt — zum Beispiel, um den Originaltext zu speichern, ihn mit nicht-escapter Eingabe zu vergleichen oder ihn an ein System weiterzugeben, das literales Markup erwartet.

Diese Seite behandelt die Syntax, das $flags-Argument und seine Auswirkung auf Anführungszeichen, den Unterschied zu html_entity_decode() sowie einen Sicherheitshinweis, den Sie vor der Verwendung kennen sollten.

Syntax

htmlspecialchars_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string
ParameterErforderlichBeschreibung
$stringJaDer String mit den zu dekodierenden HTML-Entitäten.
$flagsNeinEine Bitmaske, die steuert, wie Anführungszeichen und der Dokumenttyp behandelt werden.

Die Funktion gibt den dekodierten String zurück. Es werden nur die Entitäten konvertiert, die von htmlspecialchars() erzeugt wurden — für den vollständigen Satz benannter und numerischer HTML-Entitäten verwenden Sie stattdessen html_entity_decode().

Hinweis: Der Standardwert von $flags wurde in PHP 8.1 von ENT_COMPAT | ENT_HTML401 auf ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 geändert. Die folgenden Beispiele verhalten sich auf beiden Versionen identisch.

Einfaches Beispiel

Beispiel für PHP htmlspecialchars_decode()

php— editable, runs on the server

In diesem Beispiel haben wir eine String-Variable $html_string, die HTML-Code mit Entitäten enthält. Wir verwenden die Funktion htmlspecialchars_decode(), um die HTML-Entitäten in ihre entsprechenden Zeichen umzuwandeln.

Die Ausgabe dieses Codes lautet:

<h1>Hello World</h1>

Die Zeichen < und > wurden aus &lt; und &gt; wiederhergestellt.

Anführungszeichen mit $flags steuern

Das zweite Argument, $flags, legt fest, welche Anführungszeichen-Entitäten dekodiert werden. Dies sind die am häufigsten verwendeten Werte:

FlagAuswirkung auf Anführungszeichen
ENT_QUOTESDekodiert sowohl doppelte (&quot;) als auch einfache (&#039;) Anführungszeichen.
ENT_COMPATDekodiert doppelte Anführungszeichen; beim Dekodieren werden auch einfache Anführungszeichen dekodiert.
ENT_NOQUOTESLässt sowohl &quot; als auch &#039; unverändert.
ENT_HTML5Behandelt die Eingabe als HTML5 (kombinieren Sie dies mit einem Anführungszeichen-Flag, z. B. ENT_QUOTES | ENT_HTML5).

Ein häufiger Irrtum: ENT_COMPAT wird oft mit „nur doppelte Anführungszeichen" assoziiert, aber dieser Unterschied gilt nur für die Kodierungsseite (htmlspecialchars()). Beim Dekodieren wird &#039; sowohl unter ENT_QUOTES als auch unter ENT_COMPAT konvertiert. Um einfache Anführungszeichen kodiert zu belassen, muss ENT_NOQUOTES übergeben werden.

Wie verwendet man PHP htmlspecialchars_decode()?

php— editable, runs on the server

In diesem Beispiel haben wir eine String-Variable $html_string, die HTML-Code mit Entitäten enthält, einschließlich eines kodierten einfachen Anführungszeichens. Wir verwenden die Funktion htmlspecialchars_decode() mit dem Flag ENT_QUOTES, um die HTML-Entitäten in ihre entsprechenden Zeichen umzuwandeln und das einfache Anführungszeichen zu behandeln.

Die Ausgabe dieses Codes lautet:

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

Das Flag ENT_QUOTES hat das einfache Anführungszeichen in I'm zusammen mit den spitzen Klammern wiederhergestellt.

htmlspecialchars_decode() vs html_entity_decode()

Beide Funktionen wandeln Entitäten zurück in Zeichen um, behandeln aber unterschiedliche Mengen:

  • htmlspecialchars_decode() dekodiert nur die fünf Entitäten, die von htmlspecialchars() erzeugt werden: &amp;, &lt;, &gt;, &quot; und &#039;. Sie ist schnell und vorhersehbar.
  • html_entity_decode() dekodiert die gesamte HTML-Entitätstabelle, einschließlich benannter Entitäten wie &copy;, &nbsp; und &euro;, sowie numerischer Referenzen.
<?php
$text = "&copy; 2024 &amp; &lt;Acme&gt;";

// Leaves &copy; untouched — it is not one of the five special chars
echo htmlspecialchars_decode($text);   // &copy; 2024 & <Acme>
echo "\n";

// Decodes &copy; too
echo html_entity_decode($text);        // © 2024 & <Acme>
?>

Verwenden Sie htmlspecialchars_decode(), wenn Sie nur einen Aufruf von htmlspecialchars() rückgängig machen müssen. Greifen Sie auf html_entity_decode() zurück, wenn der Text benannte Entitäten wie &copy; oder &nbsp; enthalten kann.

Sicherheitshinweis

Das Dekodieren wandelt &lt;script&gt; wieder in ein aktives <script>-Tag um. Dekodieren Sie niemals einen String und geben ihn dann ohne erneutes Escaping auf einer HTML-Seite aus, da Sie sonst eine Cross-Site-Scripting (XSS)-Lücke wieder öffnen. Dekodieren Sie nur zum Speichern, Vergleichen oder für Nicht-HTML-Ausgaben — und rufen Sie htmlspecialchars() erneut auf, bevor Sie etwas an den Browser zurücksenden.

Verwandte Funktionen

Übung

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