Pergunta sobre javascript, jquery – Javascript decodificando entidades html [duplicado]

61

Duplicata Possível:
Como decodificar entidades HTML usando jQuery?

Eu quero converter este texto:

"<p>name</p><p><span style="font-size:xx-small;">ajde</span></p><p><em>da</em></p>"

para html, com tags e tudo em Javascript ou Jquery. Como fazer isso?

sua exportação final: <p> nome </ p> <p> <span style = "tamanho da fonte: xx-small;"> ajde </ span> </ p> <p> <em> da </ em> </ p> </ body> EmRa228
A maneira mais fácil é atribuir um seletor de classe ao seu elemento e, em seguida, usar esse código$('.selector').each(function(a,b){$(b).html($(b).text())}) Hamidreza

Sua resposta

4   a resposta
166
var text = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';
var decoded = $('<textarea/>').html(text).text();
alert(decoded);

Isso define o innerHTML de um novo elemento (não anexado à página), fazendo com que o jQuery decodifique-o em HTML, que é então retirado com .text ().

Demonstração ao vivo.

É uma ideia muito ruim porque está permitindo a injeção de HTML. por exemplo, se no texto recebido você tem algo parecido com isto:<script>alert(code injection')</script> Ele mostrará um alerta na tela do usuário. Josh
Não tenho certeza se isso também é apropriado (estou usando o jQuery 2.x):$.parseHTML(text)[0].textContent; Ricky
E se o texto for"><img src=x onerror=prompt(1)>? viky
Quando a string codificada contémEntrar sinal entre tags, isso retorna apenasEntrar em vez de html (pelo menos no Chrome). para corrigi-lo eu mudei a solução para$('<textarea/>').html(text).html() Sasha
não use$('<div/>') - Eu não faço possíveis ataques XSS. Usar$('<textarea/>'); trijin
18

Existe uma solução jQuery emesta discussão. Tente algo como isto:

var decoded = $("<div/>").html('your string').text();

Isso define o innerHTML de um novo<div> elemento (não anexado à página), fazendo com que o jQuery decodifique-o em HTML, que é então retirado com.text().

não está funcionando no firefox XIMRX
9

Usando o jQuery, o mais fácil será:

var text = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';

var output = $("<div />").html(text).text();
console.log(output);

DEMO: http://jsfiddle.net/LKGZx/

O mesmo que as outras duas respostas. Você receberá um distintivo de honra se excluir a resposta :) Dan Dascalescu
3

Eu acho que você está procurando por isso?

$('#your_id').html('&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;').text();

Perguntas relacionadas