2014-02-18 302 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。奇怪的。 –