Как избежать амперсанда в яваскрипте строки так, что страница будет проверять строга?

голоса
30

Я пытаюсь передать dataString к к АЯКС вызова с помощью JQuery. В вызове, я построить параметры GET, а затем отправить их на страницу PHP на приемном конце. Проблема заключается в том, что строка данных имеет амперсанд в них и HTML строгий валидатор засорению на нем.

Вот код:

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

и вот пример сообщения валидатора: не может генерировать системный идентификатор для общей сущности «пароль».

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

(В считывающему «P» после первого амперсандом отмечен красным цветом указывает на точку отказа).

Задан 10/12/2008 в 05:01
источник пользователем
На других языках...                            


5 ответов

голоса
34

Попробуйте поместить свой JavaScript внутри CDATA блока, как это:

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

который должен сделать это пройти проверку. Для большей безопасности вы можете добавлять комментарии Javascript вокруг тегов CDATA, чтобы скрыть их от старых браузеров, которые не понимают тега CDATA:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script> 
Ответил 10/12/2008 в 05:04
источник пользователем

голоса
21

"\ U0026" работает!

Ответил 06/05/2009 в 20:33
источник пользователем

голоса
6

Примечание: перед тем один идет вслепую обертывание текста в CDATA блоках, следует помнить , что цель CDATA является NOT для создания недопустимых символов в силу.

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

Ответил 11/12/2008 в 00:00
источник пользователем

голоса
0

Иногда \u0026, &#38, %26, &amp, или <![CDATA[ ... ]]>работа для амперсандов в блоках сценария в XHTML.
Я хотел бы спросить , почему мы должны хотеть такого рода ограничения (моргать лояльность по отношению к ошибкам в проектировании SGML) , который также предотвращает &nbsp, mathml, targetи nested xmlот работы.
Почему мы не можем просто сказать , что в блоке сценария нет тегов или других вещей , SGML не получают признали? Почему не может позволить верстку цели работать?
Я не вижу преимущество в SGML , которые перевешивают недостатки. Сейчас, несмотря на то, html5 несколько доступны, является XHTML валидатор , который ловит большинство ошибок разработчиков. Давайте исправим XML без исторической связи с его происхождением.

Ответил 29/01/2012 в 23:57
источник пользователем

голоса
0

я бы попробовал:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember;
Ответил 10/12/2008 в 05:07
источник пользователем

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