如何做一个字符串的urlencoded的字符串替换
问题描述:
我有一个字符串像x = "http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D'%s'&format=json"
如何做一个字符串的urlencoded的字符串替换
如果我做x % 10
因为有%20f
等,这被视为格式字符串失败了,所以我必须做一个字符串conactination 。我如何在这里使用普通的字符串替换。
答
urldecode字符串,执行格式化,然后用urlencode一遍:
import urllib
x = "http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D'%s'&format=json"
tmp = urllib.unquote(x)
tmp2 = tmp % (foo, bar)
x = urllib.quote(tmp2)
正如一位评论者所指出的,做用任意用户输入的字符串作为格式规范是历史上危险的格式,并且是肯定馊主意。
答
否则,您可以使用新的风格的输出格式(因为V 2.6可用),它不依赖于%:
x = 'http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D{0}&format=json'
x.format(10)
它也具有不typedependent的进步。
答
在python字符串格式化中,使用%%
输出一个%字符(docs)。
>>> "%d%%" % 50
'50%'
所以,你可以用%%代替所有的%,除非你想格式化过程中替代。但@Conrad Meyer的解决方案在这种情况下显然更好。
上帝保存SQL注入! – Konamiman 2009-12-11 08:44:07
umm。这是如何冒sql注入风险的?唯一可以使用的部分是urlopen(或家庭)调用,并且我假设雅虎将有逃避机制。 (我的观点是,这不是避免输入的正确地方,国际海事组织) – agiliq 2009-12-11 08:50:33