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


Я пытаюсь передать dataString вызову ajax с помощью 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…

(в валидаторе буква " р " после первый амперсанд отмечен красным цветом, указывающим на точку отказа).

5 30

5 ответов:

Попробуйте поместить 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> 

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

Примечание: прежде чем слепо переносить текст в блоки CDATA, помните, что цель CDATA - Не для того, чтобы сделать недопустимые символы допустимыми.

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

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

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

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