2014-02-18 262 views
2

我试图将用户提供的字符串作为Flask URL参数传递。 url_for(func_name, param="string with spaces")或类似的东西会生成一个带空格的URL。带空格的url参数生成带空格的url

如果用户输入一个带空格的字符串,生成的url有空格,它似乎工作。

另外,如果我输入的网址为%20,它似乎重定向到一个带空格的网址。 我认为带空格的URL是一个糟糕的主意。

如何让它正常工作(url_for和重定向)? 还是我应该接受它?

P.S. 传递用户提供的字符串作为参数安全吗?如果不是,我应该如何清理用户输入字符串?

+0

这是您的浏览器显示空格;一切都按预期工作。 –

回答

2

不,Flask正确生成URL编码;与现有应用程序demoing:在另一方面

>>> with app.test_request_context('/'): 
...  print url_for('core.city', city='new york') 
... 
/new%20york 

浏览器可以选择显示此类URL 为了便于阅读解码

url_for()报价输入为URL安全;编码的URL不能包含可以解释为HTML的值,因此就用户提供的值而言,您可以安全地使用它。

+0

我只是试着复制/粘贴,看起来你是对的。 OTOH当我添加随机垃圾到结束我的404页面,显示request.url的空间不是%20 s。奇怪的。 –