International PHP Conference Berlin 2025

htmlspecialchars_decode

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

htmlspecialchars_decodeWandelt besondere HTML-Entities zurück in Zeichen um

Beschreibung

htmlspecialchars_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string

Diese Funktion ist das Gegenstück zu htmlspecialchars(). Sie wandelt besondere HTML-Auszeichnungen zurück in Zeichen um.

Die umgewandelten Entities sind: &, " (wenn ENT_NOQUOTES nicht gesetzt ist), ' (wenn ENT_QUOTES gesetzt ist), < und >.

Parameter-Liste

string

Die zu dekodierende Zeichenkette.

flags

Eine Bitmaske von einem oder mehreren der folgenden Flags, die die Behandlung von Anführungszeichen sowie den zu nutzenden Dokumententyp festlegen. Der Standardwert ist ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Verfügbare flags-Konstanten
Name der Konstante Beschreibung
ENT_COMPAT Wandelt doppelte Anführungszeichen um und lässt einfache Anführungszeichen unverändert.
ENT_QUOTES Wandelt sowohl doppelte als auch einfache Anführungszeichen um.
ENT_NOQUOTES Lässt sowohl doppelte als auch einfache Anführungszeichen unverändert.
ENT_SUBSTITUTE Ersetzt ungültige Code-Unit-Sequenzen mit dem Unicode-Ersatzzeichen U+FFFD (UTF-8) oder � (andernfalls), anstatt eine leere Zeichenkette zurückzugeben.
ENT_HTML401 Behandle Code als HTML 4.01.
ENT_XML1 Behandle Code als XML 1.
ENT_XHTML Behandle Code als XHTML.
ENT_HTML5 Behandle Code als HTML 5.

Rückgabewerte

Gibt die dekodierte Zeichenkette zurück.

Changelog

Version Beschreibung
8.1.0 flags geändert von ENT_COMPAT zu ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Beispiele

Beispiel #1 Ein htmlspecialchars_decode()-Beispiel

<?php
$str
= "<p>this -&gt; &quot;</p>\n";

echo
htmlspecialchars_decode($str);

// Beachten Sie, dass die Anführungszeichen nicht umgewandelt werden
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

<p>this -> "</p>
<p>this -> &quot;</p>

Siehe auch

add a note

User Contributed Notes 3 notes

up
2
thomas at xci[ignore_this]teit dot commm
16 years ago
The example for "htmlspecialchars_decode()" below sadly does not work for all PHP4 versions.

Quote from the PHP manual:
"get_html_translation_table() will return the translation table that is used internally for htmlspecialchars() and htmlentities()."

But it does NOT! At least not for PHP version 4.4.2.
This was already reported in a bug report (http://bugs.php.net/bug.php?id=25927), but it was marked as BOGUS.

Proof:
Code:
--------------------
<?php
var_dump
(get_html_translation_table(HTML_SPECIALCHARS,ENT_QUOTES));
var_dump(htmlspecialchars('\'',ENT_QUOTES));
?>
--------------------

Output:
--------------------
array
'"' => '&quot;'
''' => '&#39;'
'<' => '&lt;'
'>' => '&gt;'
'&' => '&amp;'

'&#039;'
--------------------

This comment now is not to report this bug again (though I really believe it is one), but to complete the example and warn people of this pitfall.

To make sure your htmlspecialchars_decode fake for PHP4 works, you should do something like this:

<?php
function htmlspecialchars_decode($string,$style=ENT_COMPAT)
{
$translation = array_flip(get_html_translation_table(HTML_SPECIALCHARS,$style));
if(
$style === ENT_QUOTES){ $translation['&#039;'] = '\''; }
return
strtr($string,$translation);
}
?>

Br, Thomas
up
0
Anonymous
18 years ago
This should be the best way to do it.
(Reposted because the other one seems a bit slower and because those who used the code under called it htmlspecialchars_decode_php4)

<?php

if ( !function_exists('htmlspecialchars_decode') )
{
function
htmlspecialchars_decode($text)
{
return
strtr($text, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
}
}

?>
up
-2
or-k at or-k dot com
19 years ago
that works also with &auml; and &quot; and so on.
get_html_translation_table(HTML_ENTITIES) => offers more characters than HTML_SPECIALCHARS

function htmlspecialchars_decode_PHP4($uSTR)
{
return strtr($uSTR, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
}
To Top