2012-01-03 151 views
1

我有一個窗體的HTML。 用戶提交表單後,表單中的值將被髮送到帶有Ajax的數據庫。 我的問題是,用戶在其中一個字段中使用加號(+)提交表單,加號不會顯示在數據庫中。Javascript特殊字符

我的代碼:

function update() 
{ 
    var branch_id = 1; 
    var saleTitle = $("#title").val(); 
    var saleText = $("#text").val(); 
    var imgSrc = $("#imgSrc").html(); 
    var datastr ='branch_id=' + branch_id + '&saleTitle=' + saleTitle + 
       '&saleText=' + saleText + '&imgSrc=' + imgSrc + '&func=update'; 

     $.ajax({ 
     type: "POST", 
     url: "update.php", 
     data: datastr, 
     success: function(msg){ 
      //alert("Data Saved: " + msg); 
      if (msg == "") 
      { 
       $("#message").html("Update was successful!"); 
      } 
      else 
      { 
       $("#message").html("Error") + " " + msg; 
      } 
     } 
    }); 
} 
+0

你檢查你的數據從Ajax調用獲得服務器端?您需要檢查它是來自js(這是您向我們展示的代碼)還是來自PHP(但您沒有向我們展示您使用的代碼) – JMax 2012-01-03 13:16:48

+0

服務器端的數據是沒有加號。 – 2012-01-03 13:20:21

+0

數據庫中的列類型是什麼? – 2012-01-03 13:30:15

回答

1

傳遞了一個對象,而不是字符串。

var dataobj = { 
    branch_id : branch_id, 
    saleTitle : saleTitle, 
    saleText : saleText, 
    imgSrc : imgSrc, 
    func  : "update" 
}; 
// … 
data: dataobj 

然後jQuery將照顧逸出的數據(+裝置在該數據格式的空間)爲您和連接它到應用/ X WWW的窗體-urlencoded數據。

+0

查詢字符串?它的一個職位! – 2012-01-03 13:21:16

+0

現在你的回答是OK :) – 2012-01-03 13:24:27

+0

工程就像魅力。謝謝!! – 2012-01-03 13:29:12

3

使用:encodeURIComponent(xxx)在具有加號

encodeURIComponent('[email protected]#$%^&*(){}[]=:/,;?+\'"\\') 

將導致領域:

~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C 
+1

這將編碼整個查詢字符串,而不是它的一個組件。 – Quentin 2012-01-03 13:17:15

+1

其實你應該使用encodeURIComponent圍繞單個變量('branch_id','saleTitles') – Tomas 2012-01-03 13:17:38

+1

@Quentin編輯。謝謝。 – 2012-01-03 13:19:53

0

您可以嘗試jQuery的序列化 http://api.jquery.com/serialize/

+0

這是行不通的。並非所有數據都由表單字段的值組成:'var imgSrc = $(「#imgSrc」)。html();' – Quentin 2012-01-03 13:28:53