将字符串转换为有效的网址内容

时间:2014-01-18 18:22:26

标签: python url parameters

我需要分享这样的链接

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')到我的列表中。

有没有好办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用urllib.quotestr.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 =“;” | “/”| “?” | “:”| “@”| “&安培;” | “=”| “+”|                 “$”| “”

在上面保留的字符中,您似乎希望将=?&保留在查询字符串中,所以请告诉它。它会逃脱其余的。