Каков стандарт для application / x-www-form-urlencoded и пустого значения? - PullRequest
4 голосов
/ 08 марта 2011

Некоторое время назад я заметил, что при кодировании карты name: value в 'application/x-www-form-urlencoded она выглядит примерно так (здесь я использую Python):

>>> from urllib import urlencode
>>> urlencode({'hello': '', 'blabla': 'hihi'})
'blabla=hihi&hello='

Но при разборе (по крайней мере, с Python) просто удаляются пары, которые имеют пустое значение:

>>> from urlparse import parse_qs
>>> parse_qs('blabla=hihi&hello=')
{'blabla': ['hihi']}

Так ... это стандартное поведение? Где я могу найти ссылку на то, как www-form-urlencoded должен быть проанализирован? Некоторое время я гуглил, нашел RFC для Uris, W3C документы для форм и так далее, но ничего не сказал о том, как обрабатывать пустые значения. Может кто-нибудь дать мне указатель на это ???

1 Ответ

4 голосов
/ 08 марта 2011

Насколько я знаю, для этого нет «стандарта».Единственное, что описано (в спецификации html, как вы узнали), это то, как браузер должен кодировать данные формы.То, что вы хотите делать (или нет) с пустыми значениями, зависит от вас.

Обратите внимание, что urlparse.parse_qs() имеет необязательный параметр, keep_blank_values, который позволяет вам контролировать, как он должен обрабатывать эти параметры:

>>> from urlparse import parse_qs
>>> parse_qs('blabla=hihi&hello=', keep_blank_values=True)
{'blabla': ['hihi'], 'hello': ['']}
...