2010-04-10 10 views
11

¿Es posible convertir etiquetas html a entidades html utilizando javascript/jquery usando cualquier forma posible como regex o de alguna otra manera. ¿Si es así, entonces cómo?Convertir etiquetas en entidades html

Ejemplo:

<div> deben convertirse en &lt;div&gt;

Nota: No estoy hablando acerca de los lenguajes del lado del servidor.

Respuesta

28

Prueba esta función para los caracteres especiales HTML:

function htmlencode(str) { 
    return str.replace(/[&<>"']/g, function($0) { 
     return "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";"; 
    }); 
} 
+0

'¿Por qué no apos' en lugar de' 39' #? –

+0

@Eli Gray: la entidad * apos * se introdujo en XML 1.0 (y así se define para XHTML) pero no está definida en HTML 4. (Ver http://www.w3.org/TR/xhtml1/#C_16) – Gumbo

+2

¡Qué pedazo de código tan genial! Me tomó un minuto para ver lo que estabas haciendo allí! Has hecho mi noche. –

0
var d = "<div>" 
d = d.replace(/<|>/g, function(chr){ 
    return chr == "<" ? "&lt;" : "&gt;" 
}) 
console.log(d) 
7

Como se ha etiquetado con jQuery, una solución impulsado por jQuery debe trabajar para usted:

$("<div>").text("<div>bleh</div>whatever").html() 

Reemplazar el argumento de el método de texto con cualquier marcado que quieras escapar.

+0

Distinción muy útil. –

1

Si usted tiene la variable y que desea insertar en un div, puede llamar de texto().

var myVar = "<span><strong>Some vars</strong> Some var extra</span>"; 
$("div").text(myVar); 
1

tengo 2 implementaciones rápidas y pequeñas para la codificación HTML de forma segura.

Puede codificar todos los caracteres de la cadena:

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})} 

O simplemente apuntar a los personajes principales que preocuparse acerca de (&, inebreaks, <,>, "y ') como:

function encode(r){ 
 
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"}) 
 
} 
 

 
var myString='Encode HTML entities!\n"Safe" escape <script></'+'script> & other tags!'; 
 

 
test.value=encode(myString); 
 

 
testing.innerHTML=encode(myString); 
 

 
/************* 
 
* \x26 is &ampersand (it has to be first), 
 
* \x0A is newline, 
 
*************/
<p><b>What JavaScript Generated:</b></p> 
 

 
<textarea id=test rows="3" cols="55"></textarea> 
 

 
<p><b>What It Renders Too In HTML:</b></p> 
 

 
<div id="testing">www.WHAK.com</div>

0

Hay una forma concisa de hacer esto utilizando String.prototype.replace() y expresiones regulares de la siguiente manera:

var tag = "<h1>This should </h1>be bold<h2> and big</h2>"; 
var escapedTag = tag.replace(/</g, "&lt;").replace(/>/g, "&gt;"); 
Cuestiones relacionadas