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. &lt; für ein < oder &gt; 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.

  1. Die Zeichenkette mit den umzuwandelnden Entities (string).
  2. 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.

  • &lt; wird zu <
  • &gt; wird zu >
  • &amp; wird zu &
  • &quot; wird zu " (abhängig vom 2. Parameter)
  • &#039; wird zu ' (abhängig vom 2. Parameter)

Angenommen, man in einer Zeichenkette mit den folgenden HTML-Entities.

  • &lt; &gt; &amp; &quot; &#039;

Wenn man die Funktion htmlspecialchars_decode() auf die Zeichenkette anwendet, werden daraus die folgenden Zeichen.

  • < > & " &#039;
<?php

$str = '&lt; &gt; &amp; &quot; &#039;';
$str = htmlspecialchars_decode($str);

// Ausgabe < > & " &#039;
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 &#039; 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 &#039; umgewandelt wird.

<?php

$str = '&lt; &gt; &amp; &quot; &#039;';
$str = htmlspecialchars_decode($str, ENT_QUOTES);

// Ausgabe < > & " '
echo $str;

?>

Mit ENT_NOQUOTES werden beide Anführungszeichen nicht umgewandelt.

<?php

$str = '&lt; &gt; &amp; &quot; &#039;';
$str = htmlspecialchars_decode($str, ENT_NOQUOTES);

// Ausgabe < > & &quot; &#039;
echo $str;

?>

Mehrere flag-Konstanten kann man mit einem | (Pipezeichen) getrennt angeben. Manche Entities wie beispielsweise das &apos; 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 = '&lt; &gt; &amp; &quot; &#039; &apos;';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_HTML401);

// Ausgabe < > & " ' &apos;
echo $str;

?>

Mit ENT_XML1, ENT_XHTML oder ENT_HTML5 wird auch &apos; in ein einfaches Anführungszeichen umgewandelt.

<?php

$str = '&lt; &gt; &amp; &quot; &#039; &apos;';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_XML1);

// Ausgabe < > & " ' '
echo $str;

?>
<?php

$str = '&lt; &gt; &amp; &quot; &#039; &apos;';
$str = htmlspecialchars_decode($str, ENT_QUOTES | ENT_XHTML);

// Ausgabe < > & " ' '
echo $str;

?>
<?php

$str = '&lt; &gt; &amp; &quot; &#039; &apos;';
$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.