Index: django/contrib/admin/views/main.py
===================================================================
--- django/contrib/admin/views/main.py	(revision 6980)
+++ django/contrib/admin/views/main.py	(working copy)
@@ -11,6 +11,7 @@
 from django.db.models.query import handle_legacy_orderlist, QuerySet
 from django.http import Http404, HttpResponse, HttpResponseRedirect
 from django.utils.html import escape
+from django.utils.http import urlencode
 from django.utils.text import capfirst, get_text_list
 from django.utils.encoding import force_unicode, smart_str
 from django.utils.translation import ugettext as _
@@ -604,11 +605,12 @@
                 if k.startswith(r):
                     del p[k]
         for k, v in new_params.items():
-            if k in p and v is None:
-                del p[k]
-            elif v is not None:
+            if v is None:
+                if k in p:
+                    del p[k]
+            else:
                 p[k] = v
-        return mark_safe('?' + '&amp;'.join([u'%s=%s' % (k, v) for k, v in p.items()]).replace(' ', '%20'))
+        return '?%s' % urlencode(p)
 
     def get_results(self, request):
         paginator = ObjectPaginator(self.query_set, self.lookup_opts.admin.list_per_page)
