Forum und email

html_entity_decode

(PHP 4 >= 4.3.0, PHP 5)

html_entity_decode — Convertit toutes les entités HTML en caractères normaux

Description

string html_entity_decode ( string $string [, int $quote_style [, string $charset ]] )

html_entity_decode() est la fonction contraire de htmlentities() : elle convertit les entités HTML de la chaîne string en caractères normaux.

Le paramètre optionnel quote_style vous permet de définir ce qu'il adviendra des guillemets simples et doubles. Ce paramètre prend l'une des valeurs suivantes (et la valeur par défaut est ENT_COMPAT) :

Constantes disponibles pour quote_style
Constante Description
ENT_COMPAT Convertit les guillemets doubles et ignore les guillemets simples.
ENT_QUOTES Convertit les guillemets doubles et les guillemets simples.
ENT_NOQUOTES Ne convertit aucun guillemet.

Le jeu de caractères ISO-8859-1 est utilisé par défaut, comme paramètre charset . Ce paramètre permet de choisir le jeu de caractères utilisé dans la conversion.

Les jeux de caractères suivants sont disponibles et supportés par PHP 4.3.0 et plus récent.

Jeux de caractères supportés
Jeux de caractères Alias Description
ISO-8859-1 ISO8859-1 Europe occidentale, Latin-1
ISO-8859-15 ISO8859-15 Europe occidentale, Latin-9. Dispose du signe Euro, des caractères spéciaux français et finlandais, qui manquent au Latin-1(ISO-8859-1).
UTF-8   Unicode 8 bits multi octets, compatible avec l'ASCII
cp866 ibm866, 866 Jeu de caractères Cyrillic spécifique à DOS. Ce jeu de caractères est supporté depuis PHP 4.3.2.
cp1251 Windows-1251, win-1251, 1251 Jeu de caractères Cyrillic spécifique à Windows. Ce jeu de caractères est supporté depuis PHP 4.3.2.
cp1252 Windows-1252, 1252 Jeu de caractères spécifique de Windows pour l'Europe occidentale.
KOI8-R koi8-ru, koi8r Russe. Ce jeu de caractères est supporté depuis PHP 4.3.2.
BIG5 950 Chinois traditionnel, principalement utilisé à Taiwan.
GB2312 936 Chinois simplifié, officiel.
BIG5-HKSCS   Big5 avec les extensions de Hong Kong, chinois traditionnel.
Shift_JIS SJIS, 932 Japonais
EUC-JP EUCJP Japonais

Note: Les autres jeux de caractères ne sont pas reconnus, et le ISO-8859-1 sera utilisé à la place.

Note: Cette fonction ne supporte pas les jeux de caractères multi-octets dans PHP < 5.

Example#1 Décoder des entités HTML

<?php
$orig 
'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure';
$a htmlentities($orig);
$b html_entity_decode($a);

echo 
$a// J'ai &quot;sorti&quot; le &lt;strong&gt;chien&lt;/strong&gt; tout &amp;agrave; l'heure
echo $b// J'ai "sorti" le <strong>chien</strong> tout à l'heure

// Pour les utilisateurs ayant des versions antérieures à PHP 4.3.0 :
function unhtmlentities ($string
{
   
// Remplace les entités numériques
   
$string preg_replace('~&#x([0-9a-f]+);~ei''chr(hexdec("\\1"))'$string);
   
$string preg_replace('~&#([0-9]+);~e''chr("\\1")'$string);
   
// Remplace les entités litérales
   
$trans_tbl get_html_translation_table (HTML_ENTITIES);
   
$trans_tbl array_flip ($trans_tbl);
   return 
strtr ($string$trans_tbl);
}

$c unhtmlentities($a);
echo 
$c// J'ai "sorti" le <strong>chien</strong> tout à l'heure
?>

Note: Vous pourriez vous demander pourquoi trim(html_entity_decode('&nbsp;')); ne réduit pas la chaîne à la chaîne vide. C'est parce que l'entité &nbsp; n'est pas un code ASCII 32 (qui serait supprimé par trim()) mais un code ASCII 160 (0xa0) dans le jeu de caractères par défaut ISO 8859-1.

Voir aussi htmlentities(), get_html_translation_table(), htmlspecialchars() et urldecode().