31

我正在尝试使用 JQuery 将 dataString 传递给 ajax 调用。在调用中,我构造了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”标记为红色,表示失败点)。

4

5 回答 5

36

尝试将您的 javascript 放在 CDATA 块中,如下所示:

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

这应该使它通过验证。为了更加安全,您可以在 CDATA 标记周围添加 Javascript 注释,以对不理解 CDATA 标记的旧浏览器隐藏它们:

<script type="text/javascript">
/* <![CDATA[ */
// content of your Javascript goes here
/* ]]> */
</script> 
于 2008-12-10T04:04:08.820 回答
25

"\u0026" 有效!

于 2009-05-06T19:33:41.777 回答
6

注意:在盲目地将文本包装在 CDATA 块中之前,请注意 CDATA 的目的不是使无效字符有效。

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

于 2008-12-10T23:00:07.453 回答
1

有时\u0026, &#38, %26, &amp, or<![CDATA[ ... ]]>用于 xhtml 脚本块中的 & 符号。
我想问一下为什么我们需要这种限制(对 SGML 设计中的错误保持忠诚),它也会阻止&nbspmathmltargetnested xml工作。
为什么我们不能简单地说在脚本块中没有标签或其他 SGML 内容被识别?为什么 xhtml 不能让目标工作?
我没有看到 SGML 的优势大于劣势。现在,尽管 html5 有点可用,但 xhtml 是捕获最多开发人员错误的验证器。让我们在不考虑其起源的情况下修复 xml。

于 2012-01-29T22:57:52.913 回答
-1

我会尝试:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember;
于 2008-12-10T04:07:40.763 回答