PHP : , La fonction  html_entity_decode() de PHP

HTML code des caractères spéciaux et des symboles, tels que € pour €, ou © pour ©.
Lorsque vous créez un moteur de recherche PHP ou un outil d'analyse de page web, les entités HTML dans une page doivent être décodées en caractères uniques pour obtenir un texte propre et analysable. La fonction standard html_entity_decode() de PHP va faire le travail, mais vous devez utiliser un caractère riche, codage, tel que UTF-8 et les chaînes des caractères multi-octets. Dans cet article on va voir comment.

comment décoder les entités HTML sur une page web

rel=nofellow>entité HTML. Il y a quelques centaines de ces entités définies dans HTML 4. Mais il y a plus de 100 000 caractères Unicode disponibles avec les entités décimales ou hexadécimales. Cependant, le support des polices pour tous ces entités est encore incomplète sur les systèmes Windows, Mac et Linux d'aujourd'hui. Avant d'utiliser les caractères Unicode dans une page web, faites des essais sur des navigateurs différents pour différents systèmes d'exploitation.
Pour faire une page web de traitement de texte, vous devez convertir les entités HTML et les références de caractère numérique en caractères normaux. Vous devrez utiliser un codage basé sur Unicode, tel que UTF-8 ou UTF-16, qui est capable de représenter tous ces entités.
PHP dispose de deux fonctions capable de décoder les références de caractères en caractères Unicode : html_entity_decode() etmb_convert_encoding(). L’utilisation des deux est facile.

Définition et usage La fonction html_entity_decode()


PHP references des fonctions PHP

(PHP 4 >= 4.3.0, PHP 5)

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

La fonction html_entity_decode()

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

Syntaxe

              html_entity_decode(string,quotestyle,character-set)  
           
 

Le premier argument est la chaîne de texte à décoder. La version décodée de la chaîne est retournée.
Le 2e argument indique comment traiter les guillemets à la fonction.
Le 3éme argument sélectionne le jeu de caractères à décoder . Cet argument est optionnel et vaut par défaut "ISO_8859-1" (Latin-1).
Toutefois, cette valeur par défaut, html_entity_decode() décode uniquement les références de caractères Latin-1 équivalents. Mais comme il y a seulement 191 caractères imprimables de Latin-1. Tous les autres caractères références restent non décodable. Pour décoder toutes les références de caractères HTML, vous devez utiliser un codage Unicode comme "utf-8" comme troisième argument.

Paramètre Description

 string

Requis. Spécifie la chaîne à décoder

 quotestyle

Facultatif. 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) : Les modèles disponibles de citation sont :

  • 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.

 character-set

Facultatif. Une chaîne qui spécifie quel jeu de caractères  employer.

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 multioctets, 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é à Taïwan.
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, serons remplacés par ISO-8859-1.

  •  Shift_JIS - Japonais
  • EUC-JP - Japonais

Exemple 1 Sélectionner le code

              <html>
              <body>
               
              <?php
              $chaine = "Jane &amp; &#039;Tarzan&#039;";
              echo html_entity_decode($chaine);
              echo "<br />";
              echo html_entity_decode($chaine, ENT_QUOTES);
              echo "<br />";
              echo html_entity_decode($chaine, ENT_NOQUOTES);
              ?>
               
              </body>
              </html>
           
 

Le résultat dans le  navigateur du code ci-dessus sera :


              Jane & 'Tarzan'
              Jane & 'Tarzan'
              Jane & 'Tarzan'
           
 

Si vous regardez la « source  » dans la fenêtre de navigateur, vous verrez le code HTML suivant :

		  
				<html>
				<body>
				Jane & &#039;Tarzan&#039;<br />Jane & 'Tarzan'<br />Jane & &#039;Tarzan&#039; 
				</body>
				</html>               
        
 

Exemple 2 Sélectionner le code

              <html>
              <body>
              <?php
              $chaine = " Mon nom est &Oslash;yvind &Aring;sane. Je suis norvégien ";
              echo html_entity_decode($chaine, ENT_QUOTES, "ISO-8859-1");
              ?>
              </body>
              </html>
           
 

Le résultat dans le navigateur du code ci-dessus sera :


              Mon nom est Øyvind Åsane. Je suis norvégien
           
 

Si vous regardez la « source  » dans la fenêtre de navigateur, vous verrez le code  HTML suivant :


			<html>
			<body>
			 Mon nom est Øyvind Åsane. Je suis norvégien
			</body>
			</html>             
           
 
Exemple 3 Sélectionner le code

			<?php
			$orig = 'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure';
			$a = htmlentities($orig);
			$b = html_entity_decode($a);
			echo $a;
			echo "<br />";
			echo $b;
			echo "<br />";
			// Pour les utilisateurs ayant des versions antérieures à PHP 4.3.0 :
			function unhtmlentities($chaineing)
			{
			   // Remplace les entités numériques
				$chaineing = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $chaineing);
				$chaineing = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $chaineing);
			   // Remplace les entités litérales
				$trans_tbl = get_html_translation_table(HTML_ENTITIES);
				$trans_tbl = array_flip($trans_tbl);
				return strtr($chaineing, $trans_tbl);
			}
			$c = unhtmlentities($a);
			echo $c;
			?> 
           
 

Définition et usage La fonction mb_convert_encoding

La fonction mb_convert_encoding() est l'une des nombreuses fonctions de caractères multi-octets en PHP. Il peut être utilisé pour effectuer une conversion entre les différents codages (environ 60). Un tel codage est pour les entités HTML et les références de caractères :

syntaxe

$utf8_text = mb_convert_encoding( $text, "utf-8", "HTML-ENTITIES" );

Le premier argument est la chaîne de texte à décoder, et la version décodée est retournée et dans la syntaxe ci-dessus elle est stockée dans la variable $utf8_text
Le deuxième argument est l'encodage utilisé, par exemple "utf-8".
Le troisième argument sélectionne l'encodage à convertir. Dans ce cas, "Entités HTML" indique à la fonction de convertir les entités HTML en caractères UTF-8.
Cette fonction fonctionne est utile pour les entités HTML nommées et les références de caractère décimal. Malheureusement, à partir de PHP 5.2, mb_convert_encoding() a un bug connu qui convertit incorrectement les entités HTML hexadécimales en caractères de sans sens. Jusqu'à ce que ce bug soit fixé, utiliser html_entity_decode().

Exemple

Lire un fichier HTML, convertir en UTF-8, supprimer les balises, décode les entités HTML et afficher le résultat:

Sélectionner le code

<?php
$NomFichier="http://www.oujood.com/ref-fonc-php/fonction-html-entity-decode.php";
/* Lire un fichier HTML */
$sortie_texte = file_get_contents($NomFichier);
 
/*Obtenir le codage des caractères d'une balise  du fichier */
preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i',
    $sortie_texte, $matches );
$encoding = $matches[3];
 
/* Convertir en UTF-8 avant toute chose */
$utf8_text = iconv( $encoding, "utf-8", $sortie_texte );
 
/*Supprime les balises HTML */
$utf8_text = strip_tags( $utf8_text );
 
/* Decoder les entités HTML  */
$utf8_text = html_entity_decode( $utf8_text, ENT_QUOTES, "utf-8" ); 
echo $utf8_text; 
?>
 
 
Par carabde 22 Aout 2014