application/x-www-form-urlencoded' 和空值的标准是什么?

5 投票
1 回答
4120 浏览
提问于 2025-04-16 13:14

不久前,我注意到在把一个映射 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 应该如何解析的参考资料?我在网上查了一段时间,找到了关于URI的RFC文档、W3C的表单文档等等,但没有找到关于空值应该如何处理的信息。有没有人能给我指个方向???

1 个回答

4

据我所知,这里没有什么“标准”。在HTML规范中(正如你所发现的),只描述了浏览器应该如何编码表单数据。你想怎么处理空值,完全取决于你自己。

需要注意的是,urlparse.parse_qs() 有一个可选参数 keep_blank_values,这个参数可以让你控制它如何处理这些空值:

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

撰写回答