diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 57d77f54fcd03659ca69b61ac437c576df94c029..e374fe0035aa8334d33695065d3def0ea258386d 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -262,7 +262,7 @@ class ApplicationController < ActionController::Base
   end
 
   def redirect_back_or_default(default)
-    back_url = CGI.unescape(params[:back_url].to_s)
+    back_url = URI.escape(CGI.unescape(params[:back_url].to_s))
     if !back_url.blank?
       begin
         uri = URI.parse(back_url)
diff --git a/test/integration/account_test.rb b/test/integration/account_test.rb
index cc7565f0f92329b4394f6a5a3b7c15d85e82613c..39869d2855a3c2c0695cb5ee4d2e7e221823c11f 100644
--- a/test/integration/account_test.rb
+++ b/test/integration/account_test.rb
@@ -32,6 +32,15 @@ class AccountTest < ActionController::IntegrationTest
     assert_template "my/account"
   end
 
+  def test_redirect_after_login
+    target_url =  "/my/account?q=%C3%A4"
+
+    get target_url
+    post "/login", :username => 'jsmith', :password => 'jsmith', :back_url => @response.redirected_to[:back_url]
+
+    assert_redirected_to target_url
+  end
+
   def test_autologin
     user = User.find(1)
     Setting.autologin = "7"