Sé que hay bibliotecas por ahí, pero aquí hay un par de soluciones para los navegadores. Funcionan bien cuando se colocan cadenas de datos de entidad html en áreas editables humanas donde desea que se muestren los caracteres, como textarea o input [type = text].
Agrego esta respuesta, ya que tengo que admitir versiones anteriores de IE y creo que termina con algunos días de investigación y prueba. Espero que alguien encuentre esto útil.
Primero esto es para navegadores más modernos que usan jQuery, tenga en cuenta que esto NO debe usarse si tiene que admitir versiones de IE anteriores a 10 (7, 8 o 9) ya que eliminará las líneas nuevas dejándolo con solo una larga linea de texto
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;
};
}
Esto siguiente se basa en el trabajo de Kennebec arriba, con algunas diferencias que son sobre todo por el bien de las versiones anteriores de IE. Esto no requiere jQuery, pero aún requiere un navegador.
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 necesita esto, hay una cierta probabilidad de que esté abordando el problema de la manera incorrecta. – AndreKR
¿Cuál es el razonamiento detrás de no hacer esto? – nuaavee
Esto es necesario en un caso en el que tiene datos que deben ser compatibles con HTML para su visualización, pero que se pueden guardar en un archivo de texto y descargarlos un usuario. En ese caso, es realmente necesario porque los usuarios generalmente ni siquiera sabrán que es una entidad de caracteres, sin importar cuál es. – ArtlyticalMedia