diff --git a/django/http/__init__.py b/django/http/__init__.py index 5735300159..be48acdc41 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -1,9 +1,9 @@ import os from Cookie import SimpleCookie from pprint import pformat -from urllib import urlencode, quote +from urllib import urlencode from django.utils.datastructures import MultiValueDict -from django.utils.encoding import smart_str +from django.utils.encoding import smart_str, iri_to_uri RESERVED_CHARS="!*'();:@&=+$,/?%#[]" @@ -334,14 +334,14 @@ class HttpResponseRedirect(HttpResponse): def __init__(self, redirect_to): HttpResponse.__init__(self) - self['Location'] = quote(redirect_to, safe=RESERVED_CHARS) + self['Location'] = iri_to_uri(redirect_to) class HttpResponsePermanentRedirect(HttpResponse): status_code = 301 def __init__(self, redirect_to): HttpResponse.__init__(self) - self['Location'] = quote(redirect_to, safe=RESERVED_CHARS) + self['Location'] = iri_to_uri(redirect_to) class HttpResponseNotModified(HttpResponse): status_code = 304 diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index 27a0b07df0..d31f351670 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -175,8 +175,8 @@ upper = stringfilter(upper) def urlencode(value): "Escapes a value for use in a URL" - import urllib - return force_unicode(urllib.quote(value)) + from django.utils.http import urlquote + return urlquote(value) urlencode = stringfilter(urlencode) def urlize(value): diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index d2335dd87b..1acad6135c 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -111,14 +111,14 @@ u'MIXED CASE INPUT' u'\xcb' ->>> urlencode(u'jack & jill') -u'jack%20%26%20jill' +>>> urlencode(u'fran\xe7ois & jill') +u'fran%C3%A7ois%20%26%20jill' >>> urlencode(1) u'1' >>> iriencode(u'S\xf8r-Tr\xf8ndelag') u'S%C3%B8r-Tr%C3%B8ndelag' ->>> iriencode(urlencode(u'jack & jill')) -u'jack%20%26%20jill' +>>> iriencode(urlencode(u'fran\xe7ois & jill')) +u'fran%C3%A7ois%20%26%20jill' >>> urlizetrunc(u'http://short.com/', 20) u'http://short.com/'