Side navigation
#11930 closed bug (invalid)
Opened June 19, 2012 02:54AM UTC
Closed June 19, 2012 06:56PM UTC
Ajax POST is encoded in UTF-16
Reported by: | soren121@sorenstudios.com | Owned by: | |
---|---|---|---|
Priority: | undecided | Milestone: | None |
Component: | unfiled | Version: | 1.7.2 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
When I submit Chinese characters (in this example, 中文) via an .ajax() POST, jQuery appears to encode the data in UTF-16.
I've intercepted the POST headers with Firebug, which says that jQuery sends those two characters as %u4E2D%u6587
. That appears to be URL-encoded UTF-16. If I disable the jQuery AJAX and POST it normally through Firefox 13, Firefox sends %E4%B8%AD%E6%96%87
, which is definitely URL-encoded UTF-8.
Here's the jQuery code in question (ripped from my blog software LightBlog):
$('#create').submit(function() { $('#notifybox').slideUp('normal').empty(); var inputs = []; $('.cf', this).each(function() { if($(this).is(':checkbox') && $(this).is(':not(:checked)')) { void(0); } else { inputs.push(this.name + '=' + escape(this.value)); } }) jQuery.ajax({ data: inputs.join('&'), type: "POST", url: this.getAttribute('action'), contentType: "application/x-www-form-urlencoded;charset=UTF-8", timeout: 2000, error: function() { $('#notifybox').text('Failed to submit <?php echo $type; ?>.').css("background","#E36868").css("border-color","#a40000").slideDown("normal"); }, success: function(json) { var r = jQuery.parseJSON(json); if(r.result == 'success') { if(r.showlink == true) { $('#notifybox').html('<?php echo ucwords($type) ?> created. | <' + 'a href="' + r.response + '">View <?php echo $type ?></' + 'a>').slideDown("normal"); } else { $('#notifybox').html('<?php echo ucwords($type) ?> created.').slideDown("normal"); } $('#title').val(''); $('#wysiwyg').cleditor()[0].clear(); } else { $('#notifybox').text('Failed to submit <?php echo $type; ?>; ' + r.response).css("background","#E36868").css("border-color","#a40000").slideDown("normal"); } } }) return false; })
Stack Overflow (link to my question at SO) told me to report this here, as it appears to be a bug in jQuery. It happens in every major browser, and I've set the meta tags to UTF-8, sent the headers as UTF-8 and such; none of that helps.
Attachments (0)
Change History (4)
Changed June 19, 2012 03:14AM UTC by comment:1
Changed June 19, 2012 03:16AM UTC by comment:2
It's probably obvious that I never submit bugs, and I apologize for spamming, but here's a corrected link: http://jsfiddle.net/pJgyu/25800/
Changed June 19, 2012 06:36PM UTC by comment:3
Please mark this ticket invalid. The problem lies in escape(), and has nothing to do with jQuery. My apologies.
Changed June 19, 2012 06:56PM UTC by comment:4
resolution: | → invalid |
---|---|
status: | new → closed |
I apologize for the block of code in the ticket; I didn't see the jsFiddle notice until after I submitted it, and I can't edit it now.
Here's a link to the code on jsFiddle: http://jsfiddle.net/pJgyu/25799/
You'll need to have something open to intercept the POST data, like Firebug, or Chrome Inspector.