代码之家  ›  专栏  ›  技术社区  ›  Steve Claridge

使用jQuery将html代码发布到PHP

  •  3
  • Steve Claridge  · 技术社区  · 14 年前

    我允许用户使用CKEditor编辑网页,然后将修改后的HTML片段保存到服务器,这样我就可以在随后的页面交付中显示它们。

    我正在使用此代码将HTML和一些ID发送到服务器:

    var datatosend = JSON.stringify( { page: 1, block: 22, content: editor1.getData() } );
    
    $.ajax({
      url: "/ajax/fragment/",
      type: "POST",
      dataType: 'json',                     
      data: "data=" + datatosend,
      success: function (html) {  },
      error: function (xhr, status, msg) { 
         alert( status + " " + msg );
      }
    });      
    

    在服务器端,我正在使用PHP并正在执行以下操作:

        $json = stripslashes( $_POST[ "data" ] );
        $values = json_decode( $json, true );       
    

    在发送非HTML代码段时,这种方法很有效,但在内容中发送类似内容时,这种方法不起作用:

    <img alt="" src="http://one.localbiz.net/uploads/1/Dido-3_2.JPG" style="width: 173px; height: 130px;" />
    

    我真的不知道我应该做什么,在编码数据客户端,然后解码服务器端?也不确定数据类型:“json”是否是这里最好的使用方式?

    3 回复  |  直到 14 年前
        1
  •  3
  •   T.P.    14 年前

    data type属性是来自服务器端脚本的预期返回数据类型。因为您使用的是js on.stringify调用,所以我假设使用json2.js脚本或类似脚本,允许在客户端序列化JSON对象。

    您可能想在editor1.getData()调用中使用JavaScript escape()函数,这样它就能正确地转义问题字符。

    我使用下面的代码作为测试,PHP程序返回了传递给escape函数的字符串文本的精确副本。

    so.html格式*

    <!DOCTYPE html>
    <html><head><title>SO Example</title>
    <script 
      type="text/javascript" 
      src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js">
    </script>  
    </head>
    <body>
    
    <script type="text/javascript">
      var $data = 'd=' + escape(
        '<img alt="" src="http://one.localbiz.net/uploads/1/Dido-3_2.JPG" style="width: 173px; height: 130px;" />'
      );
    
      $.ajax({
        url:"/so.php",
        type:"post",
        dataType:"html",
        data:$data,
        success:function(obj){
          alert(obj);
        }
      });
    </script>
    </body>
    </html>
    

    所以.php*

    <?php
      echo $_POST['d'];
    
        2
  •  2
  •   drewish    14 年前

    我建议放弃对stripslashes()的PHP调用。你不应该真的需要。如果您能解释一下img元素的中断情况,将会很有帮助。

    至于“不确定数据类型:'json'是否是这里最好使用的东西”,我认为应该没问题。它将正确处理序列化,并允许您只需要发布一个值。

        3
  •  1
  •   wakurth    12 年前

    我也有这个 准确的 场景,但我使用的是YAHOO.lang.JSON.stringify(html)来自 http://developer.yahoo.com/yui/json/ ,以及PHP json_decode(json)和服务器端,我可以有任何特殊字符的html(例如!@#$%^&*()+{}:“<>?)它正确地存储在数据库中,并通过简单地反转存储html的序列从数据库中检索。我不知道这是否仅仅是尤伊弦的力量或什么,但它的工作。。。我也不确定是否有一组特殊的html不能使用,但我还没有遇到它。