From ed5ad0faabe389460f425480fe5d595e3f1c8741 Mon Sep 17 00:00:00 2001 From: David Rothstein <drothstein@gmail.com> Date: Mon, 5 Jun 2017 13:01:35 -0400 Subject: [PATCH] Issue #2289867 by joseph.olstad, jamesrward, dman, superspring, legolasbo, bceyssens, mdeletter, anrikun, Damien Tournoud: W3C HTML5 Validation error with PHP array-based query-strings built with url() containing [ ] characters --- CHANGELOG.txt | 2 ++ includes/common.inc | 2 +- modules/simpletest/tests/common.test | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index cf0a4d9c1bf1..a5d591c0ebe0 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -7,6 +7,8 @@ Drupal 7.xx, xxxx-xx-xx (development version) - Allowed services such as Let's Encrypt to work with Drupal on Apache, by making Drupal's .htaccess file allow access to the .well-known directory defined by RFC 5785. +- Fixed Drupal's URL-generating functions to always encode '[' and ']' so that + the URLs will pass HTML5 validation. - Several bug fixes. Drupal 7.54, 2017-02-01 diff --git a/includes/common.inc b/includes/common.inc index da8996a1b9a2..a32930a519ab 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -487,7 +487,7 @@ function drupal_http_build_query(array $query, $parent = '') { $params = array(); foreach ($query as $key => $value) { - $key = ($parent ? $parent . '[' . rawurlencode($key) . ']' : rawurlencode($key)); + $key = $parent ? $parent . rawurlencode('[' . $key . ']') : rawurlencode($key); // Recurse into children. if (is_array($value)) { diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test index 0f991c3c740b..83161fad959a 100644 --- a/modules/simpletest/tests/common.test +++ b/modules/simpletest/tests/common.test @@ -169,7 +169,7 @@ class CommonURLUnitTest extends DrupalWebTestCase { $this->assertEqual(drupal_http_build_query(array('a' => ' &#//+%20@Ûž')), 'a=%20%26%23//%2B%2520%40%DB%9E', 'Value was properly encoded.'); $this->assertEqual(drupal_http_build_query(array(' &#//+%20@Ûž' => 'a')), '%20%26%23%2F%2F%2B%2520%40%DB%9E=a', 'Key was properly encoded.'); $this->assertEqual(drupal_http_build_query(array('a' => '1', 'b' => '2', 'c' => '3')), 'a=1&b=2&c=3', 'Multiple values were properly concatenated.'); - $this->assertEqual(drupal_http_build_query(array('a' => array('b' => '2', 'c' => '3'), 'd' => 'foo')), 'a[b]=2&a[c]=3&d=foo', 'Nested array was properly encoded.'); + $this->assertEqual(drupal_http_build_query(array('a' => array('b' => '2', 'c' => '3'), 'd' => 'foo')), 'a%5Bb%5D=2&a%5Bc%5D=3&d=foo', 'Nested array was properly encoded.'); } /** -- GitLab