diff options
author | wycats <wycats@gmail.com> | 2010-06-27 21:12:10 -0700 |
---|---|---|
committer | wycats <wycats@gmail.com> | 2010-06-27 21:13:55 -0700 |
commit | 25215d7285db10e2c04d903f251b791342e4dd6a (patch) | |
tree | dd9e3f755aaef1e328d142967db216183f7db610 /actionpack/test/dispatch/request | |
parent | 06b0d6e5cdcfab8d49bcf559008f1753f3e7853c (diff) | |
download | rails-25215d7285db10e2c04d903f251b791342e4dd6a.tar.gz rails-25215d7285db10e2c04d903f251b791342e4dd6a.tar.bz2 rails-25215d7285db10e2c04d903f251b791342e4dd6a.zip |
Fix several known web encoding issues:
* Specify accept-charset on all forms. All recent browsers,
as well as IE5+, will use the encoding specified for form
parameters
* Unfortunately, IE5+ will not look at accept-charset unless
at least one character in the form's values is not in the
page's charset. Since the user can override the default
charset (which Rails sets to UTF-8), we provide a hidden
input containing a unicode character, forcing IE to look
at the accept-charset.
* Now that the vast majority of web input is UTF-8, we set
the inbound parameters to UTF-8. This will eliminate many
cases of incompatible encodings between ASCII-8BIT and
UTF-8.
* You can safely ignore params[:_snowman_]
TODO:
* Validate inbound text to confirm it is UTF-8
* Combine the whole_form implementations in form_helper_test
and form_tag_helper_test
Diffstat (limited to 'actionpack/test/dispatch/request')
-rw-r--r-- | actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb index 69dbd7f528..0bcef81534 100644 --- a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb +++ b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb @@ -141,6 +141,29 @@ class UrlEncodedParamsParsingTest < ActionController::IntegrationTest post "/parse", actual assert_response :ok assert_equal(expected, TestController.last_request_parameters) + assert_utf8(TestController.last_request_parameters) + end + end + + def assert_utf8(object) + return unless "ruby".encoding_aware? + + correct_encoding = Encoding.default_internal + + unless object.is_a?(Hash) + assert_equal correct_encoding, object.encoding, "#{object.inspect} should have been UTF-8" + return + end + + object.each do |k,v| + case v + when Hash + assert_utf8(v) + when Array + v.each {|el| assert_utf8(el) } + else + assert_utf8(v) + end end end end |