Python 如何在URL编码的字符串中替换字符串

Python 如何在URL编码的字符串中替换字符串,python,string,Python,String,我有一个类似x=”的字符串http://query.yahooapis.com/v1/public/yql?q=select%20owner%2Curls%20from%20flickr.photos.info%20where%20photo_id%3D“%s”&format=json“ 如果我做了x%10,但失败了,因为有%20f等被视为格式字符串,所以我必须进行字符串转换。如何在此处使用普通字符串替换?URL解码字符串,进行格式化,然后再次对其进行URL编码: 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“


如果我做了
x%10
,但失败了,因为有
%20f
等被视为格式字符串,所以我必须进行字符串转换。如何在此处使用普通字符串替换?

URL解码字符串,进行格式化,然后再次对其进行URL编码:

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)

正如一位评论者所指出的,使用任意用户输入的字符串作为格式规范进行格式化在历史上是危险的,而且肯定是一个坏主意。

url解码字符串,进行格式化,然后再次对其进行URL编码:

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)

它还具有不依赖于类型的优点。

否则,您可以使用新样式的输出格式(从v2.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)

它还具有不依赖于类型的优点。

在python字符串格式中,使用
%%
输出单个%字符()


因此,您可以将所有%替换为%%,但在格式化过程中要替换的位置除外。但是@Conrad Meyer的解决方案在这种情况下显然更好。

在python字符串格式中,使用
%%
输出单个%字符()


因此,您可以将所有%替换为%%,但在格式化过程中要替换的位置除外。但在这种情况下,@Conrad Meyer的解决方案显然更好。

。这会给sql注入带来怎样的风险?唯一使用这种方法的部分是一个urlopen(或family)调用,我假设Yahoo会有合适的转义机制。(我的观点是,这不是逃避输入的正确地方,依我看)嗯。这会给sql注入带来怎样的风险?唯一使用这种方法的部分是一个urlopen(或family)调用,我假设Yahoo会有合适的转义机制。(我的观点是,这不是逃避输入的正确地方,IMO)