Funktion htmlspecialchars_decode() - Entities umwandeln in Zeichen
In HTML sind manche Zeichen von besonderer Bedeutung, z.B. die beiden spitzen Klammern < >, mit denen die HTML-Codes geschrieben werden. Damit man diese Zeichen trotzdem als Text darstellen kann, gibt es sogenannte HTML-Entities, z.B. < für ein < oder > für >. Mit der Funktion htmlspecialchars() kann man die Zeichen in Entities umwandeln. Es kann manchmal notwendig sein, diese wieder in normale Zeichen umzuwandeln. Hierfür gibt es quasi die Gegenfunktion htmlspecialchars_decode(). Innerhalb der runden Klammern werden die folgenden Parameter angegeben.
- Die Zeichenkette mit den umzuwandelnden Entities (string).
- flag-Konstanten, um z.B. die Umwandlung von Anführungszeichen festzulegen (int, optional).
Anders als bei html_entity_decode() werden nur die folgenden Entities umgewandelt und nicht alle.
- < wird zu <
- > wird zu >
- & wird zu &
- " wird zu " (abhängig vom 2. Parameter)
- ' wird zu ' (abhängig vom 2. Parameter)
Angenommen, man in einer Zeichenkette mit den folgenden HTML-Entities.
- < > & " '
Wenn man die Funktion htmlspecialchars_decode() auf die Zeichenkette anwendet, werden daraus die folgenden Zeichen.
- < > & " '
<?php
$str = '< > & " '';
$str = htmlspecialchars_decode($str);
// Ausgabe < > & " '
echo $str;
?>
flag-Konstanten
In der Standardeinstellung werden die HTML-Entities für doppelte Anführungszeichen umgewandelt, für einfache jedoch nicht. Daher wurde der Zeichencode ' nicht verändert. Mit den folgenden flag-Konstanten hat man einige Möglichkeiten, die Verarbeitung zu beeinflussen.
- ENT_COMPAT: Standard, doppelte Anführungszeichen werden umgewandelt, einfache nicht.
- ENT_QUOTES: Beide Arten von Anführungszeichen werden umgewandelt.
- ENT_NOQUOTES: Beide Arten von Anführungszeichen werden nicht umgewandelt.
- ENT_HTML401: Behandelt den Code als HTML 4.01.
- ENT_XML1: Behandelt den Code als XML 1.
- ENT_XHTML: Behandelt den Code als XHTML.
- ENT_HTML5: Behandelt den Code als HTML5.
Im folgenden PHP-Code wurde die flag-Konstante ENT_QUOTES gesetzt, damit auch ' umgewandelt wird.
<?php
$str = '< > & " '';
$str = htmlspecialchars_decode($str, ENT_QUOTES);
// Ausgabe < > & " '
echo $str;
?>
Mit ENT_NOQUOTES werden beide Anführungszeichen nicht umgewandelt.
<?php
$str = '< > & " '';
$str = htmlspecialchars_decode($str, ENT_NOQUOTES);
// Ausgabe < > & " '
echo $str;
?>
Mehrere flag-Konstanten kann man mit einem | (Pipezeichen) getrennt angeben. Manche Entities wie beispielsweise das ' waren in HTML 4.01 noch nicht bekannt. Wenn sie in der Zeichenkette vorkommen, werden sie in der Standardeinstellung oder wenn man die flag-Konstante ENT_HTML401 setzt, nicht umgewandelt.
<?php
$str = '< > & " ' '';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_HTML401);
// Ausgabe < > & " ' '
echo $str;
?>
Mit ENT_XML1, ENT_XHTML oder ENT_HTML5 wird auch ' in ein einfaches Anführungszeichen umgewandelt.
<?php
$str = '< > & " ' '';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_XML1);
// Ausgabe < > & " ' '
echo $str;
?>
<?php
$str = '< > & " ' '';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_XHTML);
// Ausgabe < > & " ' '
echo $str;
?>
<?php
$str = '< > & " ' '';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_HTML5);
// Ausgabe < > & " ' '
echo $str;
?>
Die Funktion htmlspecialchars_decode() sollte mit Vorsicht eingesetzt werden, da damit die Entities für wichtige Zeichen in HTML umgewandelt werden, sodass es z.B. theoretisch möglich ist, HTML-Code einzuschleusen.