Currently, everywhere I use serialize I have to use it like this:
.serialize().replace(/\+/g,'%20'); otherwise any spaces in the form data will be coverted to +'s. Is there a setting that can make this the default.
For fun, here's an alternative that doesn't use a temporary variable:
$.fn.serializeAndEncode = function() { return $.map(this.serializeArray(), function(val) { return [val.name, encodeURIComponent(val.value)].join('='); }).join('&'); }; $("#formToSerialize").serializeAndEncode(); I had to do the same thing. The solution Terry gave, with escape(), doesn't work. The = and & are getting encoded (we don't want that) and the + are still there.
What I did is creating my own function to serialize:
var QueryString = ""; $(selector).each(function(index) { if(QueryString != "") QueryString += "&"; QueryString += $(this).get(0).id + "=" + encodeURIComponent( $(this).val() ); }); Don't believe there is a default, you will need to encode the string in one of these ways.
Though you could create your own plugin:
jQuery.fn.serializeAndEncode = function() { return escape(this.serialize()); } $(myForm).serializeAndEncode(); escape. It has been [deprecated for many years](developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… and should be replaced with encodeURIComponent like in Matt Roy's example.