web-dev-qa-db-ja.com

POST)経由で送信されているjQueryデータをエスケープする

JQuery.ajaxを使用してページからフォームデータを抽出し、それをデータベースに送信しています(別のPHPページ経由)。

フォーム情報は次の方法で収集されます。

var X=$('#div1').val();
var Y=$('#div2').val();

これは、POST文字列を作成するために使用されます。つまり、.

var data='varx='+X+'&vary='+Y;

アンパサンド文字が使用されている場合、これは明らかに問題です。特にユーザーがアンパサンド(&)を安全に使用できるように、変数をエスケープするための最良の方法は何ですか?

ありがとう!

18
Matt

最善の方法は、データにオブジェクトを使用することです。

jQuery.post("yourScript.php", {
   varx: X,
   vary: Y
});

または

jQuery.ajax({
      url: "yourScript.php",         
      type: "POST",
      data: ({varx: X, vary: Y}),
      dataType: "text",
      success: function(msg){
         alert(msg);
      }
   }
);

JQueryのserialize()を使用して、フォームデータをシリアル化されたクエリ文字列として取得することもできます。

var data = jQuery(formSelector).serialize();

.serialize()メソッドは、標準のURLエンコード表記でテキスト文字列を作成します。これは、フォーム要素のセットを表すjQueryオブジェクトを操作します。フォーム要素にはいくつかのタイプがあります。

私の意見ではずっときれいです:-)

24
Alex

encodeURIComponent あなたが探していることをします。

var X = encodeURIComponent($('#div1').val());
var Y = encodeURIComponent($('#div2').val());

これにより、安全でない可能性のあるすべての文字がエンコードされます。

24
LiraNuna

JavaScriptのエスケープ機能を利用できます

var data='varx='+escape(X)+'&vary='+escape(Y);
2
Dmitris