我需要分享这样的链接
mysite.com?url=https://anothersite.com&text=some text
所以它一定是这样的
mysite.com?url=https%3A%2F%anothersite.com&text=some%20text
我可以使用这种方法获得它
def URL():
try:
text = 'some text'
url = 'anothersite.com'
parameters = 'url=%s&text=%s' % (url , text)
for r,n in [(':','%3A') , (' ','%20') , ('/','%2F')]:
parameters = parameters.replace(r,n)
return 'mysite.com?%s' % parameters
except Exception as e:
print '%s (%s)' % (e.message, type(e))
return ""
它有效,但我必须指定每个字符,所以如果我的文字有'#',我必须添加,('#','%23')到我的列表中。
有没有好办法解决这个问题?
答案 0 :(得分:1)
使用urllib.quote和str.index
分割字符串(如果需要拆分):
link = 'mysite.com?url=https://anothersite.com&text=some text'
>>> link[:link.index('=')] + '=' + urllib.quote(link[link.index('=')+1:])
'mysite.com?url=https%3A//anothersite.com%26text%3Dsome%20text'
答案 1 :(得分:1)
您可能会对safe
kwarg感兴趣urllib.parse.quote
:
qs = 'mysite.com?url=https://anothersite.com&text=some text'
urllib.parse.quote(qs,safe='=?&')
Out[10]: 'mysite.com?url=https%3A%2F%2Fanothersite.com&text=some%20text'
来自文档:
RFC 2396统一资源标识符(URI):通用语法列出了 以下保留字符。
reserved =“;” | “/”| “?” | “:”| “@”| “&安培;” | “=”| “+”| “$”| “”
在上面保留的字符中,您似乎希望将=?&
保留在查询字符串中,所以请告诉它。它会逃脱其余的。