Je sais qu'il ya des bibliothèques là-bas, mais voici quelques solutions pour les navigateurs. Ils fonctionnent bien lorsque vous placez des chaînes de données d'entité html dans des zones modifiables humaines dans lesquelles vous souhaitez afficher les caractères, telles que textarea ou input [type = text].
J'ajoute cette réponse car je dois prendre en charge les anciennes versions d'Internet Explorer et je pense que cela résume quelques jours de recherche et de tests. J'espère que quelqu'un trouve cela utile. Tout d'abord, ceci est pour les navigateurs plus modernes utilisant jQuery, notez que ceci NE devrait PAS être utilisé si vous devez supporter des versions d'IE avant 10 (7, 8, ou 9) car il enlèvera les nouvelles lignes en vous laissant avec juste une longue ligne de texte.
if (!String.prototype.HTMLDecode) {
String.prototype.HTMLDecode = function() {
var str = this.toString(),
$decoderEl = $('<textarea />');
str = $decoderEl.html(str)
.text()
.replace(/<br((\/)|(\/))?>/gi, "\r\n");
$decoderEl.remove();
return str;
};
}
Ce prochain est basé sur le travail de Kennebec ci-dessus, avec quelques différences qui sont la plupart du temps à cause des anciennes versions IE. Cela ne nécessite pas jQuery, mais nécessite toujours un navigateur.
if (!String.prototype.HTMLDecode) {
String.prototype.HTMLDecode = function() {
var str = this.toString(),
//Create an element for decoding
decoderEl = document.createElement('p');
//Bail if empty, otherwise IE7 will return undefined when
//OR-ing the 2 empty strings from innerText and textContent
if (str.length == 0) {
return str;
}
//convert newlines to <br's> to save them
str = str.replace(/((\r\n)|(\r)|(\n))/gi, " <br/>");
decoderEl.innerHTML = str;
/*
We use innerText first as IE strips newlines out with textContent.
There is said to be a performance hit for this, but sometimes
correctness of data (keeping newlines) must take precedence.
*/
str = decoderEl.innerText || decoderEl.textContent;
//clean up the decoding element
decoderEl = null;
//replace back in the newlines
return str.replace(/<br((\/)|(\/))?>/gi, "\r\n");
};
}
/*
Usage:
var str = ">";
return str.HTMLDecode();
returned value:
(String) >
*/
Si vous en avez besoin, il y a une certaine probabilité que vous abordiez le problème de la mauvaise façon. – AndreKR
Quel est le raisonnement derrière ne pas le faire? – nuaavee
Ceci est nécessaire dans un cas où vous avez des données qui doivent être compatibles HTML pour l'affichage, mais qui peuvent être sauvegardées dans un fichier texte et téléchargées par un utilisateur. Dans ce cas, c'est vraiment nécessaire parce que les utilisateurs ne savent généralement pas que c'est une entité de caractère, peu importe laquelle. – ArtlyticalMedia