2013-02-28 64 views
1

我正在從一個應用程序,涉及從一個頁面使用JavaScript獲取整個頁面內容和轉儲到數據庫的HTML頁面上我有各種組件被解析並使用ajax請求存儲。我這樣做。「&」字符從api網址未保存到mysql數據庫

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.When我儘量節省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')" 
+1

你可以發佈你的PHP ?我猜它與你的查詢或執行查詢的方法有關。 – thatthatisis 2013-02-28 07:48:34

+1

您不會轉義GET參數。也許你應該。內容在&處終止的事實表明。 – 2013-02-28 07:54:24

+0

我已經更新了與查詢的問題。我認爲查詢是正確的,因爲我可以保存其餘的組件。如果這可能會有所作爲,數據庫中的字段標記爲'varchar'。 – KillABug 2013-02-28 07:58:16

回答

1

我真的懷疑問題發生在數據到達後端之前。它發生在前端,因爲在查詢字符串中包含&作爲普通字符,這會造成一些混淆。我推薦的是你網址編碼你的saveContent變量(網址編碼不是HTML編碼)。

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

也有另一種解決方法,您可以提交使用的jQuery $就提供的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); 
     } 
    }); 

我也建議你對這個問題一看就知道betweeen URL編碼和HTML編碼的區別

Difference between Url Encode and HTML encode

+0

json部分解決了這個問題。一定要看看這個問題。 **一個問題**如何發送爲json解決問題?普通字符串參數是否阻止特殊字符? – KillABug 2013-02-28 08:30:43

+1

當你使用json表單時,jQuery似乎爲你做了url編碼。從邏輯上講,當您使用扁平字符串表示法時,它將無法做到這一點,因爲它無法區分字段名稱和字段值。 – deadlock 2013-02-28 08:31:34

+0

好吧,我們來看看吧!謝謝你的幫忙! – KillABug 2013-02-28 08:32:27

1

您是否嘗試過編碼的輸入字符串和解碼輸出字符串ヶ輛和html_entity_decode?