【问题标题】:Post html code to PHP using jQuery使用 jQuery 将 html 代码发布到 PHP
【发布时间】:2011-05-17 00:47:30
【问题描述】:

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

我正在使用此代码将 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 sn-ps 的情况下很有效,但在内容中发送类似这样的内容时不起作用:

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

我真的不确定在对数据客户端进行编码然后在服务器端解码方面我应该做什么?也不确定 dataType: 'json' 是不是最好用在这里?

【问题讨论】:

  • 为什么在 json decode 之前做一个stripslashes?

标签: php jquery post character-encoding


【解决方案1】:

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

至于“不确定 dataType: 'json' 是否在这里最好使用”我会说应该没问题。它将正确处理序列化并允许您只需要发布一个值。

【讨论】:

    【解决方案2】:

    dataType 属性是来自服务器端脚本的预期返回数据类型。由于您使用的是 JSON.stringify 调用,我将假设使用 json2.js 脚本或类似的脚本,它允许在客户端对 JSON 对象进行序列化。

    您可能希望在 editor1.getData() 调用上使用 JavaScript 的 escape() 函数,以便正确地转义问题字符。

    我使用以下内容作为测试,PHP 程序返回了传递给转义函数的字符串文字的精确副本。

    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>
    

    so.php*

    <?php
      echo $_POST['d'];
    

    【讨论】:

    • 非常感谢。你有关于何时使用 escape() 或 encodeURIComponent() 的任何信息吗?以及在使用 PHP 时要做什么?网络上似乎有很多不同的意见,大概在某些时候,escape() 函数将转换上传的字符,需要在 PHP 中再次进行后续转换?
    • 我相信这取决于从客户端提交的内容。函数系列 escape()、encodeURI() 和 encodeURIComponent() 都涵盖了字符翻译的不同和重叠子集。我认为这就是为什么 wiki 标记/降价在客户端/浏览器编辑中如此受欢迎的原因,因为它们通常不那么特殊的字符疯狂。此链接对各种选项有很好的论述:xkr.us/articles/javascript/encode-compare
    【解决方案3】:

    我有同样的 exact 场景,但我使用的是来自 http://developer.yahoo.com/yui/json/ 的 YAHOO.lang.JSON.stringify(html),以及 PHP json_decode(json) 和服务器端,而我可以有带有任何特殊字符的 html(例如 !@#$%^&*()+{}:"?),它可以正确地存储在数据库中,并通过简单地反转存储 html 的序列来从数据库中检索。我不知道这是否只是 YUI stringify 的强大功能还是什么,但它有效......我也不确定是否有一些特殊的 html 集无法使用,但我没有还没有遇到过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多