diff -r 00e4e4b60c7f django/templatetags/cache.py
--- a/django/templatetags/cache.py	Sun Aug 17 07:43:34 2008 +0200
+++ b/django/templatetags/cache.py	Sat Aug 23 18:10:23 2008 +0900
@@ -2,6 +2,7 @@
 from django.template import resolve_variable
 from django.core.cache import cache
 from django.utils.encoding import force_unicode
+from django.utils.http import urlquote
 
 register = Library()
 
@@ -22,7 +23,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 = u':'.join([self.fragment_name] + [urlquote(resolve_variable(var, context)) for var in self.vary_on])
         value = cache.get(cache_key)
         if value is None:
             value = self.nodelist.render(context)
