使用带有斜杠的python quote_plus

时间:2015-11-05 15:03:49

标签: python flask urllib

我正在使用来自quote_plus的{​​{1}} urllib与其堂兄unquote_plus一起使用,以便在空格之间加倍:The Cat Sat变为The+Cat+Sat这很棒。但是现在的问题是,当我/description/id/34/the cat sat on成为这样的

时,使用此效果的路径
%2Fdescription%2F274%2Fthe+cat+sat+on

我该怎么办?我真的想要这些空间的优点,但我在为空间做空间替换之间徘徊。是否有适当的治疗方法来建立起点。我真的想保留斜线和加号。

Flask模板视图:

<a href="{{animal.url|quote_plus}}">{{animal.title}}</a>

在code.py中:

animal["url"] = "/description/"+str(animal["id"]) + "/" + animal["title"]

也:

app.jinja_env.filters['quote_plus'] = lambda u: quote_plus(u)

2 个答案:

答案 0 :(得分:2)

当你拨打quote_plus时,请设置safe ='/',这就是你要求的。

查看https://docs.python.org/3/library/urllib.parse.html处的文档 请注意,quote有一个默认参数safe ='/' wherease quote_plus有一个默认的safe =''

urllib.parse.quote(string, safe='/', encoding=None, errors=None)
urllib.parse.quote_plus(string, safe='', encoding=None, errors=None)

这里有不同之处:

url = '/description/id/34/the cat sat on'
print 'quote: ', urllib.quote(url)
print 'quote_plus: ', urllib.quote_plus(url)
print 'quote_plus with safe set: ', urllib.quote_plus(url, safe='/')

输出

quote:  /description/id/34/the%20cat%20sat%20on
quote_plus:  %2Fdescription%2Fid%2F34%2Fthe+cat+sat+on
quote_plus with safe set:  /description/id/34/the+cat+sat+on

答案 1 :(得分:0)

如何使用urllib.quote代替urllib.quote_plus?它会引用&#39; +&#39;与&#39;%20&#39;并保留斜线不变。我认为它不可定制,因为它应符合某些网址标准。