Quiero mostrar un texto a HTML mediante una función de JavaScript. ¿Cómo puedo escapar de caracteres especiales html en JS? ¿Hay una API?
javascript
html
fernando123
fuente
fuente
Respuestas:
fuente
replace()
llamadas son innecesarias. Las cadenas simples de un solo carácter funcionarían igual de bien.fuente
Puedes usar la función de jQuery
.text()
.Por ejemplo:
http://jsfiddle.net/9H6Ch/
De la documentación de jQuery con respecto a la
.text()
función:Las versiones anteriores de la documentación de jQuery estaban redactadas de esta manera ( énfasis agregado ):
fuente
const str = "foo<>'\"&";
$('<div>').text(str).html()
los rendimientosfoo<>'"&
Creo que encontré la forma correcta de hacerlo ...
fuente
document.createTextNode("<script>alert('Attack!')</script>").textContent
Usando lodash
código fuente
fuente
Esta es, con mucho, la forma más rápida en que lo he visto hacer. Además, lo hace todo sin agregar, eliminar o cambiar elementos en la página.
fuente
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
generará HTML no válido.Fue interesante encontrar una mejor solución:
Yo no analizo
>
porque no rompe el código XML / HTML en el resultado.Aquí están los puntos de referencia: http://jsperf.com/regexpairs Además, creé una
escape
función universal : http://jsperf.com/regexpairs2fuente
La forma más concisa y eficaz de mostrar texto no codificado es usar la
textContent
propiedad.Más rápido que usar
innerHTML
. Y eso sin tener en cuenta los gastos generales de escape.fuente
</
se cumpla la secuencia de cierre .Los elementos DOM admiten la conversión de texto a HTML mediante la asignación a innerText . innerText no es una función, pero su asignación funciona como si se escapara el texto.
fuente
<br>
elementos en lugar de nuevas líneas, que pueden romper ciertos elementos, como estilos o scripts. ElcreateTextNode
no es propenso a este problema.innerText
tiene algunos problemas de legado / especificaciones. Mejor de usartextContent
.Puedes codificar todos los caracteres de tu cadena:
O simplemente apunte a los personajes principales de los que preocuparse (&, inebreaks, <,>, "y ') como:
fuente
Una línea (para ES6 +):
Para versiones anteriores:
fuente
Encontré este problema al construir una estructura DOM. Esta pregunta me ayudó a resolverlo. Quería usar un doble chevron como separador de ruta, pero agregar un nuevo nodo de texto resultó directamente en la visualización del código de caracteres escapado, en lugar del carácter en sí:
fuente
Si ya usa módulos en su aplicación, puede usar el módulo escape-html .
fuente
Prueba esto, usando la
prototype.js
biblioteca:Prueba una demo
fuente
Se me ocurrió esta solución.
Supongamos que queremos agregar algo de HTML al elemento con datos inseguros del usuario o la base de datos.
No es seguro contra los ataques XSS. Ahora agregue esto.
Así es
¡Para mí, esto es mucho más fácil que usarlo
.replace()
y lo eliminará! todas las posibles etiquetas html (espero).fuente
<script>
en<script>
.