2008-12-10 27 views
29

Estoy tratando de pasar un dataString a una llamada ajax usando JQuery. En la llamada, construyo los parámetros get y luego los envío a la página php en el extremo receptor. El problema es que la cadena de datos tiene signos de unión en ellos y el validador de HTML estricto está bloqueando.¿Cómo puedo escapar un ampersand en una cadena de javascript para que la página valide estrictamente?

Aquí está el código:

$(document).ready(function(){ 
    $("input#email").focus(); 
    $('#login_submit').submit(function(){ 
     var username = $('input#email').val(); 
     var password = $('input#password').val(); 
     var remember = $('input#remember').attr("checked"); 
     var dataString = "email="+username+"&password="+password+"&remember="+remember; 
     $.post('login.php', dataString, function(data) { 
      if (data == 'Login Succeeded.') { 
       location.reload(true); 
      } else { 
       $("input#email").focus(); 
       $("#login_msg").html(data).effect("pulsate", {times: 2}, 1000); 
      } 
     });   
     return false; 
    }); 
}); 

y aquí es un ejemplo del mensaje de validación: no puede generar identificador de sistema para la entidad "contraseña" en general.

var dataString = "email="+username+"&password="+password+"&remember="+rememb… 

(en el validador de la "p" después de la primera ampersand se marca roja que indica el punto del fallo).

Respuesta

34

trate de poner su javascript dentro de un bloque CDATA así:

<script type="text/javascript"> 
<![CDATA[ 
// content of your Javascript goes here 
]]> 
</script> 

que debería hacer más pasa la validación. Para ser más segura puede agregar comentarios Javascript alrededor de las etiquetas CDATA para ocultarlos de los navegadores antiguos que no entienden la etiqueta CDATA:

<script type="text/javascript"> 
/* <![CDATA[ */ 
// content of your Javascript goes here 
/* ]]> */ 
</script> 
+6

Eso. O tal vez use \ u0026 (creo que ese es el código para &) – Strelok

+1

Eso fue perfecto. La primera respuesta no funcionó, pero la segunda sí. ¡Gracias por la ayuda! –

0

me gustaría probar:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember; 
+0

sí, ya lo intenté y no lo hice. Gracias por la ayuda. –

+0

Eso funciona en XHTML, pero no en HTML compatible con XHTML. – Quentin

20

obras "\ u0026"!

0

veces \u0026, &#38, %26, &amp o <![CDATA[ ... ]]> trabajo para los símbolos de unión en bloques de script en XHTML.
Me gustaría preguntar por qué deberíamos querer ese tipo de restricción (fidelidad de parpadeo a los errores en el diseño de SGML) que también previene el funcionamiento de &nbsp, mathml, target y nested xml.
¿Por qué no podemos simplemente decir que en un bloque de scripts no se reconocen etiquetas u otras cosas SGML? ¿Por qué no puede xhtml dejar que los objetivos funcionen?
No veo una ventaja para SGML que supere las desventajas. En este momento, aunque html5 está algo disponible, xhtml es el validador que capta la mayoría de los errores de desarrollador. Arreglemos xml sin una consideración histórica de sus orígenes.

Cuestiones relacionadas