2010-12-17 40 views
7

¿Cómo puedo evitar images[i].title a continuación de romper el código HTML si contiene comillas dobles?Javascript: Escape de comillas dobles en HTML

for (i=0;i<=images.length-1;i++){ 
    gallery += '<img width="250" height="250" src="' + images[i].src + '" title="' + images[i].title + '" />'; 
} 

Respuesta

6

Usted puede utilizar el método replace() para escapar de las comillas dobles:

for (var i = 0; i < images.length; ++i) { 
    gallery += '<img width="250" height="250" src="' + images[i].src 
     + '" title="' + images[i].title.replace(/\"/g, '\\"') + '" />'; 
} 

EDIT: el resultado será una cadena de Javascript válida, pero no funcionará como marcado HTML porque el analizador HTML no comprende los escapes de la barra invertida. Ya sea que usted tiene que reemplazar comillas dobles con comillas simples en su título de la imagen:

for (var i = 0; i < images.length; ++i) { 
    gallery += '<img width="250" height="250" src="' + images[i].src 
     + '" title="' + images[i].title.replace(/\"/g, "'") + '" />'; 
} 

O invertir los tipos de cotización en su margen de beneficio:

for (var i = 0; i < images.length; ++i) { 
    gallery += "<img width='250' height='250' src='" + images[i].src 
     + "' title='" + images[i].title + "' />"; 
} 
+0

No necesita duplicarlo, ya que está entre comillas simples. Además, 'replace' solo se ocupará de la primera cita a menos que haga'/\ "/ g'. –

+0

@Jeff, tiene razón sobre' replace() ', gracias :) Pero ¿a qué se refiere con' double escape'? –

+0

Tiene '' \\ "'', pero realmente quiere '' \" ''. Es una cadena literal de una sola cita, por lo que no necesita escapar de nada, incluida la barra. –

1

Puede llamar a sustituir en su cadena de título:

for (i=0;i<=images.length-1;i++){ 
    gallery += '<img width="250" height="250" src="' + images[i].src + '" title="' + images[i].title.replace('"',"'") + '" />'; 
} 
13

Ya que nadie parece tener exactamente la derecha contestar en mi opinión:

for (i=0;i<=images.length-1;i++){ 
    gallery += '<img width="250" height="250" src="' + images[i].src 
       + '" title="' + images[i].title.replace(/\"/g,'&quot;') + '" />'; 
} 

Esto reemplaza todos cotizaciones, y termina con comillas dobles, y ellos están representados en un html formato que es válido

+0

Esta es la respuesta correcta porque está generando un atributo HTML, por lo que debe aplicar la codificación de atributo HTML para las comillas (" para ") no codificación JavaScript para ellos. –

2
var_name.replace(/\"/gi,'%22'); 

Ese es el que está buscando. Incluso si sus colores se ven "apagados" en Visual Studio.

\ escapa a la siguiente cita. gi hace un reemplazo para todas las ocurrencias.

+0

Esto solo es cierto para los atributos que contienen url, normalmente se supone a HTML codificar el valor del atributo, no url codificarlos. – HoLyVieR

Cuestiones relacionadas