代码之家  ›  专栏  ›  技术社区  ›  Mike Farmer

如何在javascript字符串中转义和号,以便页面严格验证?

  •  30
  • Mike Farmer  · 技术社区  · 17 年前

    我尝试使用jquery将数据字符串传递给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;
        });
    });
    

    下面是验证程序消息的一个示例:无法为常规实体“password”生成系统标识符。

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

    (在验证器中,第一个符号后的“P”标记为红色,表示故障点)。

    5 回复  |  直到 13 年前
        1
  •  35
  •   Marc Novakowski    17 年前

    尝试将您的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> 
    
        2
  •  22
  •   Jeff    17 年前

    “U00 26”作品!

        3
  •  6
  •   BryanH Philipp Andreychev    17 年前

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

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

        4
  •  0
  •   Prasad Jadhav Psi    13 年前

    有时 \u0026 , &#38 , %26 , &amp 或 <![CDATA[ ... ]]> 在XHTML中的脚本块中使用与符号。
    我想问一下为什么我们需要这样一种限制(对SGML设计中的错误保持忠诚),它也可以防止 &nbsp , mathml , target 和 nested xml 从工作中。
    为什么我们不能简单地说在脚本块中没有标签或其他SGML内容被识别?为什么XHTML不能让目标工作?
    我不认为SGML的优势大于劣势。现在,尽管HTML5有些可用,但XHTML是捕获大多数开发人员错误的验证器。让我们修复XML,而不考虑其起源的历史。

        5
  •  -1
  •   Luis Melgratti    17 年前

    我会尝试:

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