在 Python 中使用百分比编码对 URL 参数进行编码
当对 URL 参数进行百分比编码以防止错误并确保正确规范化时,内置的urllib.quote() 函数中可能会出现不足。
默认编码遗漏:
按如下方式使用 urllib.quote():
url = "http://example.com?p=" + urllib.quote(query)
省略将 / 等关键字符编码为 /,这会导致 OAuth 规范化出现问题。
Unicode 支持缺陷:
此外,它无法处理 Unicode 字符串,导致尝试编码非 ASCII 字符时出现异常。
使用 urllib.parse.quote() 和安全参数改进编码:
要解决这些限制,请使用 urllib。 Python 3 中的 parse.quote() 提供了一个解决方案:
urllib.parse.quote(string, safe='/', encoding=None, errors=None)
安全参数默认为 '/',但指定空字符串会禁用额外的 ASCII 字符排除,从而确保 / 的正确编码:
urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'
修复 Python 2 中的 Unicode 处理:
在 Python 2 中,urllib.quote() 存在 Unicode 处理错误。要解决此问题,请在应用百分比编码之前将字符串手动编码为 UTF-8:
query = urllib.quote(u"Müller".encode('utf8')) print urllib.unquote(query).decode('utf8') # Outputs: Müller
替代方案: urllib.urlencode()
对于更简单的方法,考虑使用 urllib.urlencode(),它自动处理百分比编码和 Unicode:
encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode
以上是如何在 Python 中正确编码 URL 参数:解决 `urllib.quote()` 和 `urllib.urlencode()` 的限制的详细内容。更多信息请关注PHP中文网其他相关文章!