1

我正在开发一个应用程序,该应用程序涉及使用 javascript 从页面获取整个页面内容并将 html 转储到数据库。在页面上,我有各种组件将使用ajax请求进行解析和存储。我这样做。

 function saveContent(){    
    var $getContent = $('#mainWrap').clone();
    $getContent.find('.textBox, .pictureBox').removeAttr('id');
    var saveContent  = $getContent.wrap('<div></div>').html();
    var getBodyStyle=$('body').attr('style');
    var auto="auto";
    $.ajax({
        url:"save.php",
        type:"POST",
        dataType:"text",
        data:"txtComp="+saveContent+"&auto="+auto+"&pageId="+pageId+"&webId="+webId+"&userId="+userId+"&bodyStyle="+getBodyStyle,
        success:function(data){
            var options = {"text":data,"layout":"topCenter","type":"success","animateOpen": {"opacity": "show"}};
            setTimeout(function(){noty(options)}, 1000);
            //$('#draftMsg').html(data).fadeIn(500);
        }
    }); 
 }  

现在我有社交媒体组件,如 facebook、twitter。当我尝试保存 facebook 组件时,它并没有完全保存,因为它包含脚本中存在的一些参数,带有“&”。

    <div style="z-index: 1001; height: 560px; width: 413px; top: -20px; left: 121.5px;" id="com-IADDFSGNHLU7WNR3WM2KC3I8DA2DOIC6" class="facebookBox contentBox boxStyle">
    <div class="blankDiv"></div>
    <iframe class="facebookBoxObject" allowtransparency="true" style="border: medium none; overflow: hidden; height: 560px; width: 413px;" src="https://www.facebook.com/plugins/likebox.php?api_key=117096311791424&amp;locale=en_US&amp;height=560&amp;header=true&amp;show_faces=true&amp;stream=true&amp;width=413&amp;href=http://www.facebook.com/cbil360" frameborder="0" scrolling="no">
    </iframe>
   </div>

以上是我要存储到数据库中的内容,当我说时我得到它,console.log但在数据库中它只存储以下内容

 <div style="z-index: 1001; height: 388px; width: 283px; top: -20px; left: 120.5px;" id="com-IADDFSGNHLU7WNR3WM2KC3I8DA2DOIC6" class="facebookBox contentBox boxStyle">
    <div class="blankDiv"></div><iframe class="facebookBoxObject" allowtransparency="true" style="border: medium none; overflow: hidden; height: 388px; width: 283px;" src="https://www.facebook.com/plugins/likebox.php?api_key=117096311791424

它在参数之后中断,api_key因为它有&之后。我不确定我没有得到任何错误。尝试调试,但还没有得出结论。请纠正我哪里出错了。

更新:我正在使用的查询是

$query = "insert into tbl_revision (userId,revisionContent,webId,pageId,status,saveType,dateAdded) values ('".$_SESSION['UserId']."','$revisionContent','$webId','$pageId','$status','$saveType','$toDate')"
4

2 回答 2

1

您是否尝试过使用 htmlentities 和 html_entity_decode 对输入字符串进行编码并解码输出字符串?

于 2013-02-28T07:58:24.210 回答
1

我真的怀疑问题是否在数据到达您的后端之前发生。它发生在前端,因为您&在查询字符串中包含 a 作为普通字符,这会导致一些混乱。我建议您对变量进行 URL 编码(URL编码不是HTML编码)。saveContent

encodeURIComponent(saveContent) //that will replace the & with it's corresponding url encoding

还有另一种解决方法,您可以使用 jquery $.ajax 提供的 json 表单提交 ajax 请求字段。一个例子是

 $.ajax({
        url:"save.php",
        type:"POST",
        dataType:"text",
        data:{txtComp: saveContent, auto: auto }, //etc
        success:function(data){
            var options = {"text":data,"layout":"topCenter","type":"success","animateOpen": {"opacity": "show"}};
            setTimeout(function(){noty(options)}, 1000);
            //$('#draftMsg').html(data).fadeIn(500);
        }
    }); 

我还建议您查看该问题以了解 URL 编码和 HTML 编码之间的区别

URL编码和HTML编码的区别

于 2013-02-28T08:04:21.297 回答