python中的URL编码

发布于 2024-12-27 17:10:25 字数 440 浏览 1 评论 0原文

在 urllib 或其他库中是否缺少一个简单的方法来完成此任务? URL 编码将不安全的 ASCII 字符替换为“%”后跟两个十六进制数字。

这是输入和我的预期输出的示例:

Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Galaxy Nexus Build/IFL10C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0%3B+xx-xx%3B+Galaxy+Nexus+Build%2FIFL10C%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Mobile+Safari%2F534.30

Is there a simple method I'm missing in urllib or other library for this task? URL encoding replaces unsafe ASCII characters with a "%" followed by two hexadecimal digits.

Here's an example of an input and my expected output:

Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Galaxy Nexus Build/IFL10C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0%3B+xx-xx%3B+Galaxy+Nexus+Build%2FIFL10C%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Mobile+Safari%2F534.30

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

玩套路吗 2025-01-03 17:10:25

对于 Python 2.x,请使用 urllib.quote

使用 %xx 转义符替换字符串中的特殊字符。字母、数字和字符“_.-”从不被引用。默认情况下,此函数用于引用 URL 的路径部分。可选的 safe 参数指定不应加引号的其他字符 - 其默认值为“/”。

示例:

In [1]: import urllib

In [2]: urllib.quote('%')
Out[2]: '%25'

编辑

在您的情况下,为了用加号替换空格,您可以使用 urllib.quote_plus

示例:

In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'

对于 Python 3.x,使用 quote

>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)
'asdas%23%40das'

和字符串与空格一起使用 quote_plus

>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'

For Python 2.x, use urllib.quote

Replace special characters in string using the %xx escape. Letters, digits, and the characters '_.-' are never quoted. By default, this function is intended for quoting the path section of the URL. The optional safe parameter specifies additional characters that should not be quoted — its default value is '/'.

example:

In [1]: import urllib

In [2]: urllib.quote('%')
Out[2]: '%25'

EDIT:

In your case, in order to replace space by plus signs, you may use urllib.quote_plus

example:

In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'

For Python 3.x, use quote

>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)
'asdas%23%40das'

and for string with space use quote_plus

>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'
不美如何 2025-01-03 17:10:25

请记住 urllib.quoteurllib.quote_plus 如果输入是 unicode 字符串,则会抛出错误

s = u'\u2013'
urllib.quote(s)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\urllib.py", line 1303, in quote
    return ''.join(map(quoter, s))
KeyError: u'\u2013'

在这里回答,必须明确使用“UTF-8”:

urllib.quote(s.encode('utf-8'))

Keep in mind that both urllib.quote and urllib.quote_plus throw an error if an input is a unicode string:

s = u'\u2013'
urllib.quote(s)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\urllib.py", line 1303, in quote
    return ''.join(map(quoter, s))
KeyError: u'\u2013'

As answered here on SO, one has to use 'UTF-8' explicitly:

urllib.quote(s.encode('utf-8'))
演出会有结束 2025-01-03 17:10:25

另外,如果您有一个包含多个值的字典,那么最好的方法是urllib.urlencode

Also, if you have a dict of several values, the best way to do it will be urllib.urlencode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文