The reason + gets turned into a space is because your incoming data is
being urldecoded (or unescaped) by PHP, and +, just like %20, gets
turned into a space.
The reason this is happening to you when you use ajax is because when
you pass a String as the data parameter, it is assumed that it's
already escaped. When you don't use ajax, the browser takes care of
escaping the + for you (it is escaped as %2B). To fix your problem,
you need to change line 9 and wrap this.value in
encodeURIComponent(this.value).
But more importantly, you really don't need to be generating the
parameter string like this. You could just as easily generate a
parameter object and let jQuery deal with it. Something like:
var inputs = {};
$(':input', this).each(function () {
inputs[this.name] = this.value;
});
...
data: inputs,
...
BUT, more importantly, I suggest you just use Mike's form plugin, found here:
http://www.malsup.com/jquery/form/
Then you could replace the whole thing with:
$('#lightning').ajaxForm({
type: 'POST',
dataType: 'json',
success: function(json) {
// do whatever here.
}
});
Good luck with it.
--Erik
On 8/26/07, barophobia [EMAIL PROTECTED] wrote:
Hello,
I'm having a weird issue with data being passed through $.ajax. If I
submit my form through normal means I do not witness the unexpected
behavior. Only when I submit the form through $.ajax does it happen.
The problem is that I'm trying to submit an email address with a +
sign in it. Firebug even says that I'm submitting
[EMAIL PROTECTED] but PHP says that I've submitted email
[EMAIL PROTECTED].
It would seem that this is PHP's fault since Firebug reports the
correct data. But that's why this is so weird. When I take $.ajax out
of the loop PHP says that I have submitted [EMAIL PROTECTED].
Here is the jQuery code I am working with:
http://www.pastebin.ca/671971
Maybe it's really simple and I just don't see it?
Thanks,
Chris.