Jak uciec ampersand w łańcuchu javascript tak, że strona będzie validate strict?

Próbuję przekazać dataString do połączenia ajax przy użyciu JQuery. W wywołaniu konstruuję parametry get, a następnie wysyłam je na stronę php na końcu odbiorczym. Problem polega na tym, że łańcuch danych ma w sobie ampersands, a walidator HTML strict go blokuje.

Oto kod:

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

I oto przykład komunikatu walidatora: nie można wygenerować identyfikatora systemowego dla ogólnego encji "password".

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

(w walidatorze " p " Po pierwszy ampersand jest oznaczony na Czerwono wskazując punkt awarii).

Author: Community, 2008-12-10

5 answers

Spróbuj umieścić swój javascript wewnątrz bloku CDATA w taki sposób:

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

Co powinno sprawić, że przejdzie walidację. Aby być wyjątkowo bezpiecznym, możesz dodać komentarze Javascript wokół tagów CDATA, aby ukryć je przed starszymi przeglądarkami, które nie rozumieją znacznika CDATA:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script> 
 34
Author: Marc Novakowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 04:10:09

"\u0026" działa!

 22
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-06 19:33:41

Uwaga: przed ślepym zawijaniem tekstu w bloki CDATA należy pamiętać, że celem CDATA jest , A nie poprawienie nieprawidłowych znaków.

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

 6
Author: BryanH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 23:00:07

Ja bym spróbował:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember;
 0
Author: Luis Melgratti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 04:07:40

Czasami \u0026, &#38, %26, &amp, lub <![CDATA[ ... ]]> pracować dla ampersands w blokach skryptów w xhtml.
Chciałbym zapytać, po co nam takie ograniczenie (mruganie na błędy w konstrukcji SGML), które również uniemożliwia &nbsp, mathml, target, i nested xml z pracy.
Dlaczego nie możemy po prostu powiedzieć, że w bloku skryptów żadne znaczniki lub inne rzeczy SGML nie są rozpoznawane? Dlaczego XHTML nie pozwala na działanie celów?
Nie widzę przewagi SGML, która przewyższa wady. W tej chwili, nawet jeśli html5 jest nieco dostępny, XHTML jest walidatorem, który wychwytuje najwięcej błędów programistycznych. Naprawimy xml bez historycznego uwzględnienia jego pochodzenia.

 0
Author: Dana WIlson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-27 18:45:11