urlencode一组值

Ikk*_*kke 42 python http

我正在尝试使用urllib.urlencode对python中的字典进行urlencode.问题是,我必须编码一个数组.

结果必须是:

criterias%5B%5D=member&criterias%5B%5D=issue
#unquoted: criterias[]=member&criterias[]=issue
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是:

criterias=%5B%27member%27%2C+%27issue%27%5D
#unquoted: criterias=['member',+'issue']
Run Code Online (Sandbox Code Playgroud)

我尝试过几件事,但似乎无法得到正确的结果.

import urllib
criterias = ['member', 'issue']
params = {
    'criterias[]': criterias,
}
print urllib.urlencode(params)
Run Code Online (Sandbox Code Playgroud)

如果我cgi.parse_qs用来解码一个正确的查询字符串,我得到这个结果:

{'criterias[]': ['member', 'issue']}
Run Code Online (Sandbox Code Playgroud)

但如果我对该结果进行编码,则会得到错误的结果.有没有办法产生预期的结果?

CST*_*bey 71

解决方案比上面列出的解决方案简单得多.

>>> import urllib
>>> params = {'criterias[]': ['member', 'issue']}
>>> 
>>> print urllib.urlencode(params, True)
criterias%5B%5D=member&criterias%5B%5D=issue
Run Code Online (Sandbox Code Playgroud)

注意True.请参阅http://docs.python.org/library/urllib.html#urllib.urlencode doseq变量.

作为旁注,你不需要[]使它作为一个数组工作(这就是为什么urllib不包括它).这意味着您不需要将[]添加到所有数组键.

  • 澄清一下,Python 并不关心 `[]` 是否存在:无论如何它都会正确地转换它。但是是的,PHP(也许还有其他语言?)确实在乎,所以如果你对这样的系统有外部依赖,最好离开 `[]` ......它在 Python 中看起来很奇怪。 (2认同)

Luk*_*ský 12

您可以使用键值对(元组)列表:

>>> urllib.urlencode([('criterias[]', 'member'), ('criterias[]', 'issue')])
'criterias%5B%5D=member&criterias%5B%5D=issue'
Run Code Online (Sandbox Code Playgroud)

  • 你甚至不需要那样做,`urllib.urlencode(d)`应该可以正常工作. (3认同)