27

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.

3 Answers 3

4

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(); 
Sign up to request clarification or add additional context in comments.

1 Comment

This was exactly what I was doing on my own.
1

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() ); }); 

Comments

-1

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(); 

1 Comment

Please don't use 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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.