El truco jQuery no codifica comillas y en IE eliminará su espacio en blanco.
Basado en la etiqueta de escape de Django, que supongo que ya está muy utilizada / probada, hice esta función que hace lo que se necesita.
Podría decirse que es más simple (y posiblemente más rápido) que cualquiera de las soluciones para el problema de eliminación de espacios en blanco, y codifica comillas, lo cual es esencial si va a utilizar el resultado dentro de un valor de atributo, por ejemplo.
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
Actualización 2013-06-17:
En la búsqueda del escape más rápido, he encontrado esta implementación de un replaceAll
método:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(también referenciado aquí: Más rápido método para reemplazar todas las instancias de un carácter en una cadena )
Algunos resultados de rendimiento aquí:
http://jsperf.com/htmlencoderegex/25
Le da una cadena de resultados idéntica a las replace
cadenas integradas de arriba. ¡¿Sería muy feliz si alguien pudiera explicar por qué es más rápido ?!
Actualización 2015-03-04:
Acabo de notar que AngularJS está utilizando exactamente el método anterior:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Añaden un par de refinamientos: parecen estar manejando un oscuro problema de Unicode , así como convirtiendo todos los caracteres no alfanuméricos en entidades. Tenía la impresión de que esto último no era necesario siempre que tenga un juego de caracteres UTF8 especificado para su documento.
Notaré que (4 años después) Django todavía no hace ninguna de estas cosas, así que no estoy seguro de cuán importantes son:
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
Actualización 2016-04-06:
También puede desear escapar de la barra diagonal /
. Esto no es necesario para la codificación HTML correcta, sin embargo, OWASP lo recomienda como una medida de seguridad anti-XSS. (gracias a @JNF por sugerir esto en los comentarios)
.replace(/\//g, '/');