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

问题描述 投票:0回答:2

不久前,我注意到当将地图

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
的参考资料?我用 google 搜索了一段时间,找到了 uris 的 RFC、表单的 W3c 文档等等,但没有找到关于如何处理空值的信息。有人可以给我指点吗???

python html http standards urlencode
2个回答
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': ['']}

0
投票

“application/x-www-form-urlencoded”的标准是什么

AFAICT,一段时间过去了,WHATWG 现在是

application/x-www-form-urlencoded
的“标准”。 IANA 的媒体类型注册表将其分配给 WHATWG。

还有较旧的 HTML 4(相关部分),但没有指定行为。

还有一个空值?

WHATWG 的标准将数据视为键值对列表。根据 WHATWG 的说法,解析

blabla=hihi&hello=
的结果是,用伪语言表示:

[
  {key: 'blabla', value: 'hihi'},
  {key: 'hello',  value: ''},
]

即第二个键的值为空字符串。 (WHATWG 算法的输出始终是字符串。)

¹(WHATWG 是一个“生活标准”,所以我让你来决定这是否符合条件。)

© www.soinside.com 2019 - 2024. All rights reserved.