utf8_encode especiales caracteres acentos javascript jquery html-entities

especiales - iso-8859-1 to utf-8 javascript



¿Cuál es la forma correcta de decodificar una cadena que tiene entidades HTML especiales en ella? (7)

Esta es mi forma favorita de decodificar personajes HTML. La ventaja de usar este código es que las etiquetas también se conservan.

function decodeHtml(html) { var txt = document.createElement("textarea"); txt.innerHTML = html; return txt.value; }

Ejemplo: http://jsfiddle.net/k65s3/

Entrada:

Entity:&nbsp;Bad attempt at XSS:<script>alert(''new/nline?'')</script><br>

Salida:

Entity: Bad attempt at XSS:<script>alert(''new/nline?'')</script><br>

Esta pregunta ya tiene una respuesta aquí:

Supongamos que recibo un JSON de una solicitud de servicio que se ve así:

{ "message": "We&#39;re unable to complete your request at this time." }

No estoy seguro de por qué ese apostraphe está codificado así ( &#39; ); todo lo que sé es que quiero descifrarlo.

Este es un enfoque que usa jQuery y me vino a la cabeza:

function decodeHtml(html) { return $(''<div>'').html(html).text(); }

Eso parece (muy) hacky, sin embargo. ¿Cuál es una mejor manera? ¿Hay una manera "correcta"?


Esta es tan buena respuesta. Puedes usar esto con angular como este:

moduleDefinitions.filter(''sanitize'', [''$sce'', function($sce) { return function(htmlCode) { var txt = document.createElement("textarea"); txt.innerHTML = htmlCode; return $sce.trustAsHtml(txt.value); } }]);


Hay una función JS para tratar con entidades con un estilo #xxxx:
funcionar en GitHub

// encode(decode) html text into html entity var decodeHtmlEntity = function(str) { return str.replace(/&#(/d+);/g, function(match, dec) { return String.fromCharCode(dec); }); }; var encodeHtmlEntity = function(str) { var buf = []; for (var i=str.length-1;i>=0;i--) { buf.unshift([''&#'', str[i].charCodeAt(), '';''].join('''')); } return buf.join(''''); }; var entity = ''&#39640;&#32423;&#31243;&#24207;&#35774;&#35745;''; var str = ''高级程序设计''; console.log(decodeHtmlEntity(entity) === str); console.log(encodeHtmlEntity(str) === entity); // output: // true // true


Si no quieres usar html / dom, puedes usar regex. No he probado esto; pero algo como:

function parseHtmlEntities(str) { return str.replace(/&#([0-9]{1,3});/gi, function(match, numStr) { var num = parseInt(numStr, 10); // read num as normal number return String.fromCharCode(num); }); }

[Editar]

Nota: esto solo funcionaría para entidades html numéricas, y no cosas como & oring ;.

[Editar 2]

Se corrigió la función (algunos errores tipográficos), prueba aquí: http://jsfiddle.net/Be2Bd/1/


jQuery codificará y decodificará para ti.

function htmlDecode(value) { return $("<textarea/>").html(value).text(); } function htmlEncode(value) { return $(''<textarea/>'').text(value).html(); }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> $(document).ready(function() { $("#encoded") .text(htmlEncode("<img src onerror=''alert(0)''>")); $("#decoded") .text(htmlDecode("&lt;img src onerror=''alert(0)''&gt;")); }); </script> <div id="encoded"></div> <div id="decoded"></div>



No use el DOM para hacer esto. El uso del DOM para decodificar entidades HTML (como se sugiere en la respuesta actualmente aceptada) conduce a diferencias en los resultados entre navegadores .

Para una solución robusta y determinista que decodifica referencias de caracteres de acuerdo con el algoritmo en el estándar HTML, use la biblioteca . De su LÉAME:

él (para "entidades HTML") es un codificador / decodificador robusto de entidad HTML escrito en JavaScript. Admite todas las referencias de caracteres con nombre estandarizado según HTML , maneja símbolos ambiguos y otros casos extremos como lo haría un navegador , tiene un amplio conjunto de pruebas y, a diferencia de muchas otras soluciones de JavaScript , maneja muy bien los símbolos Unicode astrales. Una demostración en línea está disponible.

Así es como lo usarías:

he.decode("We&#39;re unable to complete your request at this time."); → "We''re unable to complete your request at this time."

Descargo de responsabilidad: soy el autor de la biblioteca.

Consulte esta respuesta de desbordamiento de pila para obtener más información.