Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 23301)
+++ wp-admin/includes/post.php	(working copy)
@@ -981,6 +981,7 @@
  * @return array With two entries of type string
  */
 function get_sample_permalink($id, $title = null, $name = null) {
+	//wp_die( $id."|".$title."|".$name );
 	$post = get_post($id);
 	if ( !$post->ID )
 		return array('', '');
@@ -995,14 +996,18 @@
 	// drafts, so we will fake, that our post is published
 	if ( in_array($post->post_status, array('draft', 'pending')) ) {
 		$post->post_status = 'publish';
-		$post->post_name = sanitize_title($post->post_name ? $post->post_name : $post->post_title, $post->ID);
+		$use_for_permalink = $post->post_name ? $post->post_name : $post->post_title;
+		$use_for_permalink = str_replace( '%', '', $use_for_permalink );
+		$post->post_name = sanitize_title( $use_for_permalink, $post->ID );
 	}
 
 	// If the user wants to set a new name -- override the current one
 	// Note: if empty name is supplied -- use the title instead, see #6072
-	if ( !is_null($name) )
-		$post->post_name = sanitize_title($name ? $name : $title, $post->ID);
-
+	if ( !is_null($name) ) {
+		$use_for_permalink = $name ? $name : $title;
+		$use_for_permalink = str_replace( '%', '', $use_for_permalink );
+		$post->post_name = sanitize_title( $use_for_permalink, $post->ID );
+	}
 	$post->post_name = wp_unique_post_slug($post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent);
 
 	$post->filter = 'sample';
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 23301)
+++ wp-includes/post.php	(working copy)
@@ -2770,10 +2770,12 @@
 	// Create a valid post name. Drafts and pending posts are allowed to have an empty
 	// post name.
 	if ( empty($post_name) ) {
-		if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )
-			$post_name = sanitize_title($post_title);
-		else
+		if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {
+			$post_name = str_replace( '%', '', $post_title );
+			$post_name = sanitize_title( $post_name );
+		} else {
 			$post_name = '';
+		}
 	} else {
 		// On updates, we need to check to see if it's using the old, fixed sanitization context.
 		$check_name = sanitize_title( $post_name, '', 'old-save' );
