我正在尝试将用户提供的字符串作为Flask URL参数传递。
url_for(func_name, param="string with spaces")
或类似名称会生成带空格的网址。
如果用户输入带空格的字符串,则生成的url有空格,似乎有效。
此外,如果我输入带有%20
的网址,它似乎会重定向到包含空格的网址。
我认为带空格的网址是个坏主意。
如何使其正常工作(url_for
和重定向)?
或者我应该接受它?
P.S。 传递用户提供的字符串作为参数安全吗?如果不是,我应该如何清理用户输入字符串?
答案 0 :(得分:2)
不,Flask正确生成URL编码的URL;使用现有应用程序进行演示:
>>> with app.test_request_context('/'):
... print url_for('core.city', city='new york')
...
/new%20york
另一方面,您的浏览器可能会选择显示此类网址已解码以便于阅读。
url_for()
引用输入为URL安全;编码的URL不能包含可以解释为HTML的值,因此就用户提供的值而言,您是安全的。