Existe t-il une fonction inverse à la fonction htmlentities() ? Cette question revient souvent sur les forums et les newsgroups.

La réponse est non, pas directement. Par contre, il est possible de la coder assez simplement. Le script suivant implémente donc une fonction PHP appelé unhtmlentities(). Vous êtes évidement libre de l'appeler autrement.

<?php
function unhtmlentities($chaineHtml) {
        $tmp = get_html_translation_table(HTML_ENTITIES);
        $tmp = array_flip ($tmp);
        $chaineTmp = strtr ($chaineHtml, $tmp);

        return $chaineTmp;
}

// Chaine Initiale

$chaine = "je n'ai pas testé<br>mais ca marche !";
echo $chaine."\n";

// Appel de la fonction htmlentities()

$chaineHtml=htmlentities($chaine);
echo $chaineHtml."\n";

// Appel de la fonction unhtmlentities()

$chaineOriginale=unhtmlentities($chaineHtml);
echo $chaineOriginale."\n";
?>
L'éxecution (en ligne de commande) de ce script retournera ceci :

chrome:~$ php -q test.php 
je n'ai pas testé<br>mais ca marche !
je n'ai pas test&eacute;&lt;br&gt;mais ca marche !
je n'ai pas testé<br>mais ca marche !
Ce qui est bien l'effet obtenu :)

N'hésitez pas à consulter la documentation en ligne afin d'en savoir plus sur les principales fonctions utilisées dans ce script.

get_html_translation_table
array_flip
strstr