From: Tom Hughes Date: Tue, 17 Mar 2015 18:49:39 +0000 (+0000) Subject: URI encode the X-Page-Title header X-Git-Tag: live~4164 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e2aef40437767e779f97a7447de69b4540839ff5?hp=05caad1a5dfbdf892f4b46b0916a4f6b1de4d2e3 URI encode the X-Page-Title header Browsers's are inconsistent in how they interpret the encoding of a response header in an XHR request, so URI encode it so that it simple ASCII we can then decode it again in the browser. --- diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 17476bb51..085b615c7 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -54,7 +54,7 @@ $(document).ready(function () { if (xhr.getResponseHeader('X-Page-Title')) { var title = xhr.getResponseHeader('X-Page-Title'); - document.title = decodeURIComponent(escape(title)); + document.title = decodeURIComponent(title); } $('head') diff --git a/app/helpers/title_helper.rb b/app/helpers/title_helper.rb index 3103a339f..eb1724d93 100644 --- a/app/helpers/title_helper.rb +++ b/app/helpers/title_helper.rb @@ -8,10 +8,10 @@ module TitleHelper def set_title(title = false) if title @title = TitleHelper.coder.decode(title.gsub("", "\u202a").gsub("", "\u202c")) - response.headers["X-Page-Title"] = t("layouts.project_name.title") + " | " + @title + response.headers["X-Page-Title"] = URI.escape(t("layouts.project_name.title") + " | " + @title) else @title = title - response.headers["X-Page-Title"] = t("layouts.project_name.title") + response.headers["X-Page-Title"] = URI.escape(t("layouts.project_name.title")) end end end diff --git a/test/helpers/title_helper_test.rb b/test/helpers/title_helper_test.rb index 2a3cbc46e..d07a5bd07 100644 --- a/test/helpers/title_helper_test.rb +++ b/test/helpers/title_helper_test.rb @@ -1,3 +1,4 @@ +# coding: utf-8 require "test_helper" class TitleHelperTest < ActionView::TestCase @@ -7,11 +8,15 @@ class TitleHelperTest < ActionView::TestCase assert_nil @title set_title("Test Title") - assert_equal "OpenStreetMap | Test Title", response.header["X-Page-Title"] + assert_equal "OpenStreetMap%20%7C%20Test%20Title", response.header["X-Page-Title"] assert_equal "Test Title", @title set_title("Test & Title") - assert_equal "OpenStreetMap | Test & Title", response.header["X-Page-Title"] + assert_equal "OpenStreetMap%20%7C%20Test%20&%20Title", response.header["X-Page-Title"] assert_equal "Test & Title", @title + + set_title("Tést & Tïtlè") + assert_equal "OpenStreetMap%20%7C%20T%C3%A9st%20&%20T%C3%AFtl%C3%A8", response.header["X-Page-Title"] + assert_equal "Tést & Tïtlè", @title end end