Eu quero exibir um texto em HTML por uma função javascript. Como posso escapar caracteres especiais html em JS? Existe uma API?
javascript
html
fernando123
fonte
fonte
Respostas:
fonte
replace()
chamadas são desnecessárias. Seqüências de caracteres simples de caracteres antigos simples também serviriam.fonte
Você pode usar a
.text()
função do jQuery .Por exemplo:
http://jsfiddle.net/9H6Ch/
Na documentação do jQuery referente à
.text()
função:As versões anteriores da documentação do jQuery escreveram da seguinte maneira ( ênfase adicionada ):
fonte
const str = "foo<>'\"&";
$('<div>').text(str).html()
rendimentosfoo<>'"&
Acho que encontrei a maneira correta de fazer isso ...
fonte
document.createTextNode("<script>alert('Attack!')</script>").textContent
Usando lodash
Código fonte
fonte
Esta é, de longe, a maneira mais rápida que eu já vi. Além disso, ele faz tudo sem adicionar, remover ou alterar elementos na página.
fonte
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
, produzirá HTML inválido!Foi interessante encontrar uma solução melhor:
Não analiso
>
porque não quebra o código XML / HTML no resultado.Aqui estão os benchmarks: http://jsperf.com/regexpairs Além disso, criei uma
escape
função universal : http://jsperf.com/regexpairs2fonte
A maneira mais concisa e com melhor desempenho de exibir texto não codificado é usar
textContent
property.Mais rápido que usar
innerHTML
. E isso sem levar em conta escapar de sobrecarga.fonte
</
seja atendida.Os elementos DOM suportam a conversão de texto em HTML, atribuindo a innerText . innerText não é uma função, mas atribuir a ela funciona como se o texto tivesse escapado.
fonte
<br>
de múltiplas linhas adiciona elementos no lugar de novas linhas, que podem quebrar certos elementos, como estilos ou scripts. OcreateTextNode
não é propenso a esse problema.innerText
tem alguns problemas de legado / especificação. Melhor usartextContent
.Você pode codificar todos os caracteres da sua string:
Ou apenas alveje os personagens principais com os quais se preocupar (&, inebreaks, <,>, "e ') como:
fonte
Uma linha (para ES6 +):
Para versões mais antigas:
fonte
Me deparei com esse problema ao criar uma estrutura DOM. Esta pergunta me ajudou a resolvê-lo. Eu queria usar uma divisa dupla como separador de caminho, mas o acréscimo de um novo nó de texto resultou diretamente na exibição do código de caractere de escape, em vez do próprio caractere:
fonte
Se você já usa módulos no seu aplicativo, pode usar o módulo escape-html .
fonte
Tente isso, usando a
prototype.js
biblioteca:Experimente uma demonstração
fonte
Eu vim com esta solução.
Vamos supor que queremos adicionar algum html ao elemento com dados não seguros do usuário ou banco de dados.
Não é seguro contra ataques XSS. Agora adicione isso.
Então é
Para mim, isso é muito mais fácil do que usar
.replace()
e será removido !!! todas as tags html possíveis (espero).fonte
<script>
em<script>
.