Comment puis-je échapper une esperluette dans une chaîne javascript pour que la page valide strict?

J'essaie de passer une chaîne de données à un appel ajax en utilisant JQuery. Dans l'appel, je construis les paramètres get, puis je les envoie à la page php à l'extrémité de réception. Le problème est que la chaîne de données a des esperluettes en eux et le validateur HTML strict est calé dessus.

Voici le code:

$(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;
    });
});

Et voici un exemple du message du validateur: impossible de générer l'identifiant système pour l'entité générale"mot de passe".

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

(dans le validateur le " p " Après la première Esperluette est marquée en rouge indiquant le point de la défaillance).

30
demandé sur Community 2008-12-10 07:01:03

5 réponses

Essayez de placer votre javascript dans un bloc CDATA comme ceci:

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

Qui devrait lui faire passer la validation. Pour être plus sûr, vous pouvez ajouter des commentaires Javascript autour des balises CDATA pour les cacher des navigateurs plus anciens qui ne comprennent pas la balise CDATA:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script> 
34
répondu Marc Novakowski 2008-12-10 04:10:09

" \ u0026 " fonctionne!

22
répondu 2009-05-06 19:33:41

Note: avant d'envelopper aveuglément du texte dans des blocs CDATA, sachez que le but de CDATA est PAS pour rendre les caractères invalides valides.

Voir: http://www.flightlab.com/~joe/sgml/cdata.html

6
répondu BryanH 2008-12-10 23:00:07

Je voudrais essayer:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember;
0
répondu Luis Melgratti 2008-12-10 04:07:40

, Parfois \u0026, &#38, %26, &amp, ou <![CDATA[ ... ]]> travail pour les esperluettes dans des blocs de script dans le xhtml.
Je voudrais demander pourquoi nous devrions veux ce genre de restriction (clin loyauté envers les erreurs dans la conception de SGML) qui empêche également &nbsp, mathml, target, et nested xml de travail.
Pourquoi ne pouvons-nous pas simplement dire que dans un bloc de script, aucune balise ou autre élément SGML n'est reconnu? Pourquoi xhtml ne peut-il pas laisser les cibles fonctionner?
Je ne vois pas d'avantage à SGML qui l'emporte sur les inconvénients. À l'heure actuelle, même si html5 est quelque peu disponible, xhtml est le validateur qui attrape le plus d'erreurs de développeur. Fixons xml sans égard historique à ses origines.

0
répondu Dana WIlson 2012-10-27 18:45:11