urllib.parse.unquote 函数不会将 + 解析为空格, urllib.parse.unquote_plus 会解析 . See the docs .
一个例子:
from urllib.parse import unquote
def parse_query_string(query_string):
pairs = [s2 for s1 in query_string.split('&') for s2 in s1.split(';')]
parse_result = {}
for pair in pairs:
name_value = pair.split('=', 1)
if len(name_value) != 2:
continue
if len(name_value[1]):
name = unquote(name_value[0])
_value = unquote(name_value[1])
# separate value with +
values = _value.split('+')
if name in parse_result:
parse_result[name].extend(values)
else:
parse_result[name] = values
return parse_result
@app.route('/search')
def search():
# Get raw query_string
raw_query_string = request.query_string.decode()
queries = parse_query_string(raw_query_string)
q = queries.get('q')
return ''
1 回答
如果你真的想用
+
分隔参数 . 您可以自己解析URL . (警告:它不像urllib.parse.parse_qs
那样安全 . )urllib.parse.unquote
函数不会将+
解析为空格,urllib.parse.unquote_plus
会解析 . See the docs .一个例子:
并且有一种简单的方法,如果你可以像
q=New%20Haven&q=CT
那样制作网址,Flask可以将q
解析成多个值 .或者使用
urllib.parse.parse_qs
自己解析 .