現在、シリアル化を使用するすべての場所で、次のように使用する必要があります。
.serialize().replace(/\+/g,'%20');
それ以外の場合、フォームデータ内のスペースはすべて+で覆われます。これをデフォルトにすることができる設定はありますか?.
楽しみのために、一時変数を使用しない別の方法を次に示します。
$.fn.serializeAndEncode = function() {
return $.map(this.serializeArray(), function(val) {
return [val.name, encodeURIComponent(val.value)].join('=');
}).join('&');
};
$("#formToSerialize").serializeAndEncode();
私も同じことをしなければなりませんでした。 Terryがescape()を使用して提供したソリューションは、機能しません。 =と&はエンコードされており(これは望ましくありません)、+はまだ存在しています。
私がしたことは、シリアル化するための独自の関数を作成することです。
var QueryString = "";
$(selector).each(function(index) {
if(QueryString != "") QueryString += "&";
QueryString += $(this).get(0).id + "=" + encodeURIComponent( $(this).val() );
});
デフォルトがあるとは思わないでください。文字列を これらの方法の1つ でエンコードする必要があります。
独自のプラグインを作成することもできますが、
jQuery.fn.serializeAndEncode = function() {
return escape(this.serialize());
}
$(myForm).serializeAndEncode();