2012-01-03 13 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呼び出しからサーバー側を取得したデータをチェックしましたか?あなたは私たち(あなたが私たちに見せているコード)かPHPから来ているかどうかを確認する必要があります(あなたが使っているコードを表示していません)。 – JMax

+0

サーバ側のデータは、プラス記号。 –

+0

データベースの列の種類は何ですか? –

答えて

1

はオブジェクトではなく、文字列を渡します。

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

次にjQueryのは、データをエスケープ(+スペースこのデータフォーマットでを意味する)とあなたのためのアプリケーション/ x-www-form-urlencodedでデータにそれを連結の世話をします。

+0

クエリ文字列?そのポスト! –

+0

あなたの答えはOKです:) –

+0

魅力のように動作します。ありがとう!! –

3

使用:プラス記号

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

を持ってフィールド上のencodeURIComponent(xxx)が発生します:

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

これは、クエリ文字列の一部ではなく、クエリ文字列全体をエンコードします。 – Quentin

+1

実際には、個々の変数( 'branch_id'、' saleTitles')のまわりでencodeURIComponentを使うべきです。 – Tomas

+1

@Quentin編集。ありがとう。 –

0

あなたはjQueryのシリアル化を試みることができる http://api.jquery.com/serialize/

+0

それは動作しません。すべてのデータがフォームフィールドの値ではない: 'var imgSrc = $("#imgSrc ").html();' – Quentin