Escribí una pequeña y pequeña función que hace esto. Sólo se escapa "
, &
, <
y >
(por lo general, pero eso es todo lo que necesita de todos modos). Es un poco más elegante que las soluciones propuestas anteriormente, ya que solo usa una .replace()
para hacer toda la conversión. ( EDITAR 2: complejidad de código reducida que hace que la función sea aún más pequeña y ordenada, si tiene curiosidad sobre el código original, vea el final de esta respuesta).
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Esto es Javascript simple, no se utiliza jQuery.
Escapando /
y '
también
Edite en respuesta al comentario de mklement .
La función anterior se puede ampliar fácilmente para incluir cualquier carácter. Para especificar más caracteres para escapar, simplemente insértelos en la clase de caracteres en la expresión regular (es decir, dentro de /[...]/g
) y como una entrada en el chr
objeto. ( EDIT 2: también acortó esta función, de la misma manera).
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Tenga en cuenta el uso anterior de '
para apóstrofo (la entidad simbólica '
podría haberse utilizado en su lugar; está definida en XML, pero originalmente no se incluyó en la especificación HTML y, por lo tanto, podría no ser compatible con todos los navegadores. Ver: artículo de Wikipedia sobre codificaciones de caracteres HTML ) También recuerdo haber leído en alguna parte que usar entidades decimales es más ampliamente compatible que usar hexadecimal, pero parece que no puedo encontrar la fuente para eso ahora. (Y no puede haber muchos navegadores que no sean compatibles con las entidades hexadecimales).
Nota: Agregar /
y '
a la lista de caracteres escapados no es tan útil, ya que no tienen ningún significado especial en HTML y no es necesario que se escapen.
escapeHtml
Función original
EDIT 2: la función original utilizaba una variable ( chr
) para almacenar el objeto necesario para la .replace()
devolución de llamada. Esta variable también necesitaba una función anónima adicional para abarcarla, haciendo que la función (innecesariamente) sea un poco más grande y más compleja.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
No he probado cuál de las dos versiones es más rápida. Si lo hace, no dude en agregar información y enlaces al respecto aquí.