diff --git a/core/includes/common.inc b/core/includes/common.inc
index b8f093d..61f1509 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -477,6 +477,8 @@ function drupal_get_query_array($query) {
  *
  * @param $query
  *   The query parameter array to be processed, e.g. $_GET.
+ * @param $encode
+ *   Boolean flag indicating that the return value should be url encoded.
  * @param $parent
  *   Internal use only. Used to build the $query array key for nested items.
  *
@@ -487,15 +489,16 @@ function drupal_get_query_array($query) {
  * @see drupal_get_query_parameters()
  * @ingroup php_wrappers
  */
-function drupal_http_build_query(array $query, $parent = '') {
+function drupal_http_build_query(array $query, $encode = TRUE, $parent = '') {
   $params = array();
 
   foreach ($query as $key => $value) {
-    $key = ($parent ? $parent . '[' . rawurlencode($key) . ']' : rawurlencode($key));
+    $raw_key = ($encode) ? rawurlencode($key) : $key;
+    $key = ($parent ? $parent . '[' . $raw_key . ']' : $raw_key);
 
     // Recurse into children.
     if (is_array($value)) {
-      $params[] = drupal_http_build_query($value, $key);
+      $params[] = drupal_http_build_query($value, $encode, $key);
     }
     // If a query parameter value is NULL, only append its key.
     elseif (!isset($value)) {
@@ -503,7 +506,8 @@ function drupal_http_build_query(array $query, $parent = '') {
     }
     else {
       // For better readability of paths in query strings, we decode slashes.
-      $params[] = $key . '=' . str_replace('%2F', '/', rawurlencode($value));
+      $raw_value = ($encode) ? rawurlencode($value) : $value;
+      $params[] = $key . '=' . str_replace('%2F', '/', $raw_value);
     }
   }
 
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 3b67b97..08b20eb 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -324,7 +324,7 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
 
   $path = $item['link_path'];
   if (isset($item['options']['query'])) {
-    $path .= '?' . drupal_http_build_query($item['options']['query']);
+    $path .= '?' . drupal_http_build_query($item['options']['query'], FALSE);
   }
   if (isset($item['options']['fragment'])) {
     $path .= '#' . $item['options']['fragment'];
