Index: django/templatetags/cache.py
===================================================================
--- django/templatetags/cache.py	(revision 8423)
+++ django/templatetags/cache.py	(working copy)
@@ -5,6 +5,13 @@
 
 register = Library()
 
+def build_cache_key(*fragments):
+    """
+    Generates an unique key for every unique set of arguments
+    """
+    key = u":".join(fragments)
+    return key.replace("%", "%25").replace(" ", "%20")
+
 class CacheNode(Node):
     def __init__(self, nodelist, expire_time_var, fragment_name, vary_on):
         self.nodelist = nodelist
@@ -22,7 +29,7 @@
         except (ValueError, TypeError):
             raise TemplateSyntaxError('"cache" tag got a non-integer timeout value: %r' % expire_time)
         # Build a unicode key for this fragment and all vary-on's.
-        cache_key = u':'.join([self.fragment_name] + [force_unicode(resolve_variable(var, context)) for var in self.vary_on])
+        cache_key = build_cache_key(self.fragment_name, *[force_unicode(resolve_variable(var, context)) for var in self.vary_on])
         value = cache.get(cache_key)
         if value is None:
             value = self.nodelist.render(context)
