EDIT : Vous devez utiliser l'API DOMParser comme Wladimir suggère J'ai modifié ma réponse précédente car la fonction affichée présentait une faille de sécurité.
L'extrait suivant est le code de l'ancienne réponse avec une petite modification : l'utilisation d'un fichier textarea
au lieu d'un div
réduit la vulnérabilité XSS, mais elle reste problématique dans IE9 et Firefox.
function htmlDecode(input){
var e = document.createElement('textarea');
e.innerHTML = input;
// handle case of empty input
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
htmlDecode("<img src='myimage.jpg'>");
// returns "<img src='myimage.jpg'>"
En fait, je crée un élément DOM par programme, j'assigne le code HTML à son innerHTML et je récupère la valeur du nœud à partir du nœud texte créé lors de l'insertion de l'innerHTML. Comme il s'agit simplement de créer un élément mais jamais de l'ajouter, le code HTML du site n'est pas modifié.
Il fonctionnera avec tous les navigateurs (y compris les plus anciens) et acceptera tous les Entités de caractères HTML .
EDIT : L'ancienne version de ce code ne fonctionnait pas sur IE avec des entrées vides, comme le montre l'exemple suivant ici sur jsFiddle (voir dans IE). La version ci-dessus fonctionne avec toutes les entrées.
MISE À JOUR : il semble que cela ne fonctionne pas avec les grandes chaînes de caractères, et cela introduit également une erreur de type vulnérabilité de la sécurité Voir les commentaires.