Index: wp-includes/category-template.php
===================================================================
--- wp-includes/category-template.php	(revision 15434)
+++ wp-includes/category-template.php	(working copy)
@@ -17,7 +17,7 @@
  */
 function get_category_link( $category_id ) {
 	global $wp_rewrite;
-	$catlink = $wp_rewrite->get_category_permastruct();
+	$catlink = urlencode( $wp_rewrite->get_category_permastruct() );
 
 	if ( empty( $catlink ) ) {
 		$catlink = home_url('?cat=' . $category_id);
@@ -32,7 +32,8 @@
 		elseif ($category->parent != 0 )
 			$category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
 
-		$catlink = str_replace( '%category%', $category_nicename, $catlink );
+		$catlink = str_replace( '%25category%25', $category_nicename, $catlink );
+		$catlink = str_replace( '%2F', '/', $catlink );
 		$catlink = home_url( user_trailingslashit( $catlink, 'category' ) );
 	}
 	return apply_filters( 'category_link', $catlink, $category_id );
@@ -792,7 +793,7 @@
  */
 function get_tag_link( $tag_id ) {
 	global $wp_rewrite;
-	$taglink = $wp_rewrite->get_tag_permastruct();
+	$taglink = urlencode( $wp_rewrite->get_tag_permastruct() );
 
 	$tag = &get_term( $tag_id, 'post_tag' );
 	if ( is_wp_error( $tag ) )
@@ -803,7 +804,8 @@
 		$file = get_option( 'home' ) . '/';
 		$taglink = $file . '?tag=' . $slug;
 	} else {
-		$taglink = str_replace( '%tag%', $slug, $taglink );
+		$taglink = str_replace( '%25tag%25', $slug, $taglink );
+		$taglink = str_replace( '%2F', '/', $taglink );
 		$taglink = get_option( 'home' ) . user_trailingslashit( $taglink, 'category' );
 	}
 	return apply_filters( 'tag_link', $taglink, $tag_id );
