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 (&, <, >, ", ') 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| Parameter | Erforderlich | Beschreibung |
|---|---|---|
$string | Ja | Der String mit den zu dekodierenden HTML-Entitäten. |
$flags | Nein | Eine 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
$flagswurde in PHP 8.1 vonENT_COMPAT | ENT_HTML401aufENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401geändert. Die folgenden Beispiele verhalten sich auf beiden Versionen identisch.
Einfaches Beispiel
Beispiel für PHP htmlspecialchars_decode()
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 < und > 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:
| Flag | Auswirkung auf Anführungszeichen |
|---|---|
ENT_QUOTES | Dekodiert sowohl doppelte (") als auch einfache (') Anführungszeichen. |
ENT_COMPAT | Dekodiert doppelte Anführungszeichen; beim Dekodieren werden auch einfache Anführungszeichen dekodiert. |
ENT_NOQUOTES | Lässt sowohl " als auch ' unverändert. |
ENT_HTML5 | Behandelt die Eingabe als HTML5 (kombinieren Sie dies mit einem Anführungszeichen-Flag, z. B. ENT_QUOTES | ENT_HTML5). |
Ein häufiger Irrtum:
ENT_COMPATwird oft mit „nur doppelte Anführungszeichen" assoziiert, aber dieser Unterschied gilt nur für die Kodierungsseite (htmlspecialchars()). Beim Dekodieren wird'sowohl unterENT_QUOTESals auch unterENT_COMPATkonvertiert. Um einfache Anführungszeichen kodiert zu belassen, mussENT_NOQUOTESübergeben werden.
Wie verwendet man PHP htmlspecialchars_decode()?
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 vonhtmlspecialchars()erzeugt werden:&,<,>,"und'. Sie ist schnell und vorhersehbar.html_entity_decode()dekodiert die gesamte HTML-Entitätstabelle, einschließlich benannter Entitäten wie©, und€, sowie numerischer Referenzen.
<?php
$text = "© 2024 & <Acme>";
// Leaves © untouched — it is not one of the five special chars
echo htmlspecialchars_decode($text); // © 2024 & <Acme>
echo "\n";
// Decodes © 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 © oder enthalten kann.
Sicherheitshinweis
Das Dekodieren wandelt <script> 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
htmlspecialchars()— das Kodierungs-Gegenstück zu dieser Funktion.html_entity_decode()— dekodiert alle HTML-Entitäten, nicht nur die fünf speziellen.htmlentities()— kodiert alle anwendbaren Zeichen in Entitäten.strip_tags()— entfernt HTML-Tags vollständig, anstatt sie zu dekodieren.