Opened 5 years ago

Closed 5 years ago

#29972 closed Bug (invalid)

Django QueryDict replace plus "+" by space in query string

Reported by: Vuong Hoang Owned by: nobody
Component: HTTP handling Version: 2.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When query string contains plus sign "+", e.g GET /api/tasks/?start_time=2018-11-21T11:47:15+07:00
I expect that on server:
request.GET['start_time'] == '2018-11-21T11:47:15+07:00'

But actual:
request.GET['start_time'] == '2018-11-21T11:47:15 07:00'
make the server validation failed (Invalid ISO8061 datetime string in my case)

After debugging, I find out QueryDict using limited_parse_qsl() function, that replace + with space
https://github.com/django/django/blob/master/django/utils/http.py#L433

Is this behavior a bug or some feature?

Thank you

Change History (1)

comment:1 by Raphael Kimmig, 5 years ago

Resolution: invalid
Status: newclosed

This behaviour is a feature, not a bug.
The plus sign is a reserved character, if you want to pass a plus sign you will need to encode it as %2B.

For more details on encoding query parameters see https://en.wikipedia.org/wiki/Percent-encoding

Have a great day!

Note: See TracTickets for help on using tickets.
Back to Top