html_entity_decode() is the opposite of
htmlentities() in that it converts all HTML entities
to their applicable characters from string.
The optional second quote_style parameter lets
you define what will be done with 'single' and "double" quotes. It takes
on one of three constants with the default being
ENT_COMPAT:
Table 1. Available quote_style constants
Constant Name
Description
ENT_COMPAT
Will convert double-quotes and leave single-quotes alone.
ENT_QUOTES
Will convert both double and single quotes.
ENT_NOQUOTES
Will leave both double and single quotes unconverted.
The ISO-8859-1 character set is used as default for the optional third
charset. This defines the character set used in
conversion.
Following character sets are supported in PHP 4.3.0 and later.
Table 2. Supported charsets
Charset
Aliases
Description
ISO-8859-1
ISO8859-1
Western European, Latin-1
ISO-8859-15
ISO8859-15
Western European, Latin-9. Adds the Euro sign, French and Finnish
letters missing in Latin-1(ISO-8859-1).
UTF-8
ASCII compatible multi-byte 8-bit Unicode.
cp866
ibm866, 866
DOS-specific Cyrillic charset.
This charset is supported in 4.3.2.
cp1251
Windows-1251, win-1251, 1251
Windows-specific Cyrillic charset.
This charset is supported in 4.3.2.
cp1252
Windows-1252, 1252
Windows specific charset for Western European.
KOI8-R
koi8-ru, koi8r
Russian. This charset is supported in 4.3.2.
BIG5
950
Traditional Chinese, mainly used in Taiwan.
GB2312
936
Simplified Chinese, national standard character set.
BIG5-HKSCS
Big5 with Hong Kong extensions, Traditional Chinese.
Shift_JIS
SJIS, 932
Japanese
EUC-JP
EUCJP
Japanese
Note:
Any other character sets are not recognized and ISO-8859-1 will be used
instead.
Note:
This function doesn't support multi-byte character sets in PHP < 5.
Example 1. Decoding HTML entities
<?php $orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
// For users prior to PHP 4.3.0 you may do this: function unhtmlentities($string) { // replace numeric entities $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string); // replace literal entities $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); }
$c = unhtmlentities($a);
echo $c; // I'll "walk" the <b>dog</b> now
?>
Note:
You might wonder why trim(html_entity_decode(' ')); doesn't
reduce the string to an empty string, that's because the ' '
entity is not ASCII code 32 (which is stripped by
trim()) but ASCII code 160 (0xa0) in the default ISO
8859-1 characterset.