diff --git a/core/includes/common.inc b/core/includes/common.inc
index 3706049d68f67eaf0d202d6836fbc33d4fdcd187..7ee34bbffab5d42846bb17ff81492f90f59e831b 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -451,7 +451,7 @@ function drupal_get_query_array($query) {
   if (!empty($query)) {
     foreach (explode('&', $query) as $param) {
       $param = explode('=', $param);
-      $result[$param[0]] = isset($param[1]) ? rawurldecode($param[1]) : '';
+      $result[$param[0]] = isset($param[1]) ? rawurldecode($param[1]) : NULL;
     }
   }
   return $result;
diff --git a/core/modules/system/tests/common.test b/core/modules/system/tests/common.test
index 15286b6b880695451b459ecee5f0ce5e61173e5e..6a0b8a23d3653f7b81532a057db0741efefc7cc5 100644
--- a/core/modules/system/tests/common.test
+++ b/core/modules/system/tests/common.test
@@ -76,7 +76,7 @@ class CommonDrupalAlterTestCase extends WebTestBase {
  * url() calls module_implements(), which may issue a db query, which requires
  * inheriting from a web test case rather than a unit test case.
  */
-class CommonURLUnitTestCase extends WebTestBase {
+class CommonURLWebTestCase extends WebTestBase {
   public static function getInfo() {
     return array(
       'name' => 'URL generation tests',
@@ -280,6 +280,32 @@ class CommonURLUnitTestCase extends WebTestBase {
   }
 }
 
+/**
+ * Tests for non-DB based URL generation functions.
+ */
+class CommonUrlUnitTestCase extends UnitTestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'URL generation tests',
+      'description' => 'Confirm that drupal_get_query_array() works correctly with various input.',
+      'group' => 'Common',
+    );
+  }
+
+  /**
+   * Tests drupal_get_query_array().
+   */
+  function testDrupalGetQueryArray() {
+    $this->assertEqual(drupal_get_query_array('foo=bar'), array('foo' => 'bar'), 'Simple value works as expected.');
+    $this->assertEqual(drupal_get_query_array('foo=1'), array('foo' => '1'), 'Numeric value works as expected.');
+    $this->assertEqual(drupal_get_query_array('foo=1&bar=baz'), array('foo' => '1', 'bar' => 'baz'), 'Multiple values are parsed as well.');
+    $this->assertEqual(drupal_get_query_array('foo='), array('foo' => ''), 'An empty value is set as an empty string.');
+    $this->assertEqual(drupal_get_query_array('foo'), array('foo' => NULL), 'No value is set as a null value.');
+  }
+
+}
+
 /**
  * Tests for check_plain(), filter_xss(), format_string(), and check_url().
  */