You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Miguel Diaz (JIRA)" <ji...@apache.org> on 2009/03/25 09:45:04 UTC

[jira] Created: (WW-3059) Decoding of parameters sent with XMLHttpRequest

Decoding of parameters sent with XMLHttpRequest
-----------------------------------------------

                 Key: WW-3059
                 URL: https://issues.apache.org/struts/browse/WW-3059
             Project: Struts 2
          Issue Type: Bug
          Components: Dispatch Filter
    Affects Versions: 2.1.6, 2.0.14
            Reporter: Miguel Diaz


org.apache.struts2.dispatcher.Dispatcher uses the configured default encoding (in the struts properties, with the "struts.i18n.encoding" key) when decoding received parameters.
If a request is sent with XMLHttpRequest, the parameters will allways be encoded in UTF-8, as specified in http://www.w3.org/TR/XMLHttpRequest/#send. This matches current browser behaviour (at least for IE7 and FF3).

If one has configured, say, ISO-8859-1	as the default encoding, the parameters will be decoded with the wrong charset.

This may be fixed checking if the request was sent using XMLHttpRequest. All the major JavaScript libraries (jQuery, Dojo...) as well as other languages and frameworks (Ruby on Rails, the Zend Framework and CakePHP) use the X-Requested-With header when sending request with XMLHttpRequest.
Assuming that the client side is using that technique, the fix is rather simple: in org.apache.struts2.dispatcher.Dispatcher.prepare(), check if the request was sent by XMLHttpRequest and in that case set the UTF-8 character encoding regardless of the default encoding:

if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With")))
  encoding = "UTF-8";


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.