Como posso escapar um e comercial em uma string javascript para que a página irá validar rigorosa?

votos
30

Eu estou tentando passar uma dataString para a uma chamada ajax usando JQuery. Na chamada, eu construir os parâmetros GET e depois enviá-los para a página php no fim de recepção. O problema é que a string de dados tem ampersands neles e o validador estrita HTML é chocante sobre ele.

Aqui está o 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;
    });
});

e aqui está um exemplo da mensagem de validador: não pode gerar identificador de sistema para a entidade geral password.

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

(Em que o validador a p, após o primeiro e comercial é marcado vermelho indica o ponto da falha).

Publicado 10/12/2008 em 05:01
fonte usuário
Em outras línguas...                            


5 respostas

votos
34

Tente colocar o seu javascript dentro de um bloco CDATA assim:

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

que deve fazê-lo passar de validação. Para ser mais seguro você pode adicionar comentários de JavaScript em torno dos tags CDATA para escondê-los dos navegadores mais antigos que não entendem a tag CDATA:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script> 
Respondeu 10/12/2008 em 05:04
fonte usuário

votos
21

"\ U0026" trabalha!

Respondeu 06/05/2009 em 20:33
fonte usuário

votos
6

Nota: antes de um vai cegamente envolvendo texto em blocos CDATA, estar ciente de que o propósito de CDATA é NÃO para fazer caracteres inválidos válido.

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

Respondeu 11/12/2008 em 00:00
fonte usuário

votos
0

Às vezes \u0026, &#38, %26, &amp, ou <![CDATA[ ... ]]>trabalho para ampersands em blocos de script em xhtml.
Gostaria de perguntar por que devemos querer esse tipo de restrição (piscar lealdade para com os erros no projeto de SGML) que também impede &nbsp, mathml, target, e nested xmlde trabalhar.
Por que não podemos simplesmente dizer que em um bloco de script sem marcas ou outras coisas SGML é reconhecido? Por que não pode xhtml deixar alvos trabalhar?
Eu não vejo uma vantagem para SGML que superam as desvantagens. Agora, mesmo que html5 é um pouco disponíveis, xhtml é o validador que chama a maioria dos erros de desenvolvedores. Vamos corrigir xml sem levar em conta histórica às suas origens.

Respondeu 29/01/2012 em 23:57
fonte usuário

votos
0

eu tentaria:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember;
Respondeu 10/12/2008 em 05:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more