Funktion html_entity_decode() - Entities umwandeln

Für viele Zeichen gibt es in HTML sogenannte Entities, z.B. &amp; für das Und-Zeichen &, &lt; für < und noch viele andere mehr. Bei der Verarbeitung von Zeichenketten kann es notwendig sein, die HTML-Entities wieder in ihre Ursprungszeichen umzuwandeln, z.B. wenn man Sonderzeichen und Umlaute zuvor für eine bestimmte Funktion mit htmlentities() in HTML-Entities umwandelte und diese wieder in ihrer ursprünglichen Form benötigt werden. Hierfür kann man die Funktion html_entity_decode() verwenden. Innerhalb der runden Klammern werden die Parameter wie folgt angegeben.

  1. Die Zeichenkette mit den umzuwandelnden Entities (string).
  2. flag-Konstanten, mit denen z.B. das Verhalten bei Anführungszeichen beeinflusst wird (int, optional).
  3. Zeichenkodierung (encoding, optional).

Angenommen, man hat eine Zeichenkette mit den HTML-Entities für die folgenden Zeichen.

  • Ä ä Ö ö Ü ü ß " '

Die dazugehörigen HTML-Entitäten in der Zeichenkette wären wie folgt.

  • &Auml; &auml; &Ouml; &ouml; &Uuml; &uuml; &szlig; &quot; &#039;

Wendet man die Funktion auf die Zeichenkette an, erhält man den folgenden Rückgabewert.

  • Ä ä Ö ö Ü ü ß " &#039;
<?php

$str = '&Auml; &auml; &Ouml; &ouml; &Uuml; &uuml; &szlig; &quot; &#039;';
$str = html_entity_decode($str);

// Ausgabe Ä ä Ö ö Ü ü ß " &#039;
echo $str;

?>

flag-Konstanten

Alle HTML-Entities wurden bis auf &#039; in ihre ursprünglichen Zeichen umgewandelt. Der Zeichencode &#039; ist eine Entität für ein einfaches Anführungszeichen. Da einfache Anführungszeichen in PHP den Beginn und das Ende einer Zeichenkette markieren und somit eine besondere Bedeutung haben, werden diese in der Standardeinstellung nicht umgewandelt. Mit den folgenden flag-Konstanten, die man als zweiten Parameter angeben kann, hat man einige Möglichkeiten, um das Verhalten zu steuern. Bei der Angabe mehrerer flag-Konstanten werden diese mit einem | (Pipe) voneinander getrennt.

  • ENT_COMPAT: Doppelte Anführungszeichen werden umgewandelt, einfache dagegen nicht (Standard).
  • ENT_QUOTES: Einfache und doppelte Anführungszeichen werden umgewandelt.
  • ENT_NOQUOTES: Einfache und doppelte 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.

Beim folgenden Beispiel wurde die flag-Konstante ENT_QUOTES gesetzt, sodass auch &#039; umgewandelt wird.

<?php

$str = '&Auml; &auml; &Ouml; &ouml; &Uuml; &uuml; &szlig; &quot; &#039;';
$str = html_entity_decode($str, ENT_QUOTES);

// Ausgabe Ä ä Ö ö Ü ü ß " '
echo $str;

?>

Einige Entities wie z.B. &apos; sind in HTML 4.01 noch nicht gültig gewesen. Setzt man die flag-Konstante ENT_HTML401, werden die in der Version 4.01 ungültigen Entities nicht umgewandelt.

<?php

$str = '&auml; &ouml; &uuml; &szlig; &quot; &#039; &apos;';
$str = html_entity_decode($str, ENT_QUOTES | ENT_HTML401);

// Ausgabe ä ö ü ß " ' &apos;
echo $str;

?>

In XML 1 werden dagegen die Umlaute nicht umgewandelt.

<?php

$str = '&auml; &ouml; &uuml; &szlig; &quot; &#039; &apos;';
$str = html_entity_decode($str, ENT_QUOTES | ENT_XML1);

// Ausgabe &auml; &ouml; &uuml; &szlig; " ' '
echo $str;

?>

In XHTML und HTML5 werden die Umlaute und Anführungszeichen umgewandelt.

<?php

$str = '&auml; &ouml; &uuml; &szlig; &quot; &#039; &apos;';
$str = html_entity_decode($str, ENT_QUOTES | ENT_XHTML);

// Ausgabe ä ö ü ß " ' '
echo $str;

?>
<?php

$str = '&auml; &ouml; &uuml; &szlig; &quot; &#039; &apos;';
$str = html_entity_decode($str, ENT_QUOTES | ENT_HTML5);

// Ausgabe ä ö ü ß " ' '
echo $str;

?>

Zeichenkodierung

Als dritter Parameter wird die Zeichenkodierung angegeben. Falls man den Parameter auslässt, wird der Standardwert herangezogen und der ist abhängig von der PHP-Version. Ab PHP 5.6 gilt der Wert, den man in der Konfigurationsdatei php.ini unter default_charset angegeben hat. Für die Versionen davor gilt UTF-8 und vor PHP 5.4 gilt ISO-8859-1. Damit man die PHP-Anwendung auf einen anderen Server umziehen kann, sollte man auf die Angabe der Zeichenkodierung nicht verzichten. Der PHP-Interpreter erwartet als zweiten Parameter die flag-Konstanten. Falls man diese eigentlich nicht angeben möchte, kann man beim 2. Parameter ENT_COMPAT angeben und so auf die Standardeinstellung setzen.

<?php

$str = '&auml; &ouml; &uuml; &szlig; &quot; &#039; &apos;';
$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8');

// Ausgabe ä ö ü ß " &#039; &apos;
echo $str;

?>

Mit htmlentities() und html_entity_decode() stehen dem Programmierer zwei hilfreiche Funktionen mit einigen Optionen zur Verfügung, um Zeichen in HTML-Entities und zurück umzuwandeln.