Index: wp-includes/canonical.php
===================================================================
--- wp-includes/canonical.php	(revision 20523)
+++ wp-includes/canonical.php	(working copy)
@@ -292,7 +292,7 @@
 				unset( $_parsed_query['name'] );
 		}
 
-		$_parsed_query = array_map( 'rawurlencode', $_parsed_query );
+		array_walk_recursive( $_parsed_query, '_rawurlencode_callback' );
 		$redirect_url = add_query_arg( $_parsed_query, $redirect_url );
 	}
 
@@ -448,6 +448,16 @@
 }
 
 /**
+ * Private array_walk_recursive callback used in redirect_canonical()
+ *
+ * @since 3.4
+ * @access private
+ */
+function _rawurlencode_callback( &$string, $key = null ) {
+	$string = rawurlencode( $string );
+}
+
+/**
  * Attempts to guess the correct URL from the current URL (that produced a 404) or
  * the current query variables.
  *
