Python 如何对字符串中的所有字符(包括安全字符)进行URL编码?

Python 如何对字符串中的所有字符(包括安全字符)进行URL编码?,python,urlencode,Python,Urlencode,使用Python,如何将字符串的所有字符编码为URL编码的字符串 到目前为止,大约和方法最终引用了相同的方法,例如urllib.parse.quote()或urllib.parse.urlencode()。虽然这些答案在技术上是有效的(它们遵循URL中编码特殊字符所需的规范),但我还没有找到一个答案来描述如何编码其他/非特殊字符(如小写或大写字母) 如何获取一个字符串并将每个字符编码为URL编码的字符串?揭示了这个问题的一个非常好的答案。最终功能代码如下所示: def encode_all(字符

使用Python,如何将字符串的所有字符编码为URL编码的字符串

到目前为止,大约和方法最终引用了相同的方法,例如
urllib.parse.quote()
urllib.parse.urlencode()
。虽然这些答案在技术上是有效的(它们遵循URL中编码特殊字符所需的规范),但我还没有找到一个答案来描述如何编码其他/非特殊字符(如小写或大写字母)

如何获取一个字符串并将每个字符编码为URL编码的字符串?

揭示了这个问题的一个非常好的答案。最终功能代码如下所示:

def encode_all(字符串):
返回“.join(“%{0:0>2}.”格式(字符串中字符的格式(ord(char),“x”))
让我们来分析一下

首先要注意的是返回值是一个(
…for char in string
)包装在
str.join
调用(
“”.join(…)
)中。这意味着我们将对字符串中的每个字符执行一个操作,然后最终将每个输出的字符串连接在一起(使用空字符串,
“”

字符串中的每个字符执行的操作是
“%{0:0>2}”。格式(format(ord(char),“x”)
。这可分为以下几点:

  • ord(char)
    :将每个字符转换为相应的数字
  • 格式(…,“x”)
    :将数字转换为十六进制值
  • “%{0:0>2}”。格式(…)
    :将十六进制值格式化为字符串(前缀为
    “%”

当您从概览中查看整个函数时,它会将每个字符转换为一个数字,将该数字转换为十六进制,然后将所有十六进制值塞入一个字符串(然后返回)。

请问您需要它做什么?我确信这是一个很好的理由,但我想确保这不是一个错误。在测试一些网站时,我发现对查询中的所有字符进行双重编码可以绕过Web应用程序防火墙。我一直在使用一个网站为我做编码工作,但我最终找到了一种编程方式对数据进行编码。你不需要两次格式化<代码>“%{0:0>2x}”。格式(ord(char))
这是为非ASCII字符设计的吗?例如,对于大于U+FF的代码点,两个空格的零填充实际上没有意义。我认为你最好先编码,然后引用URL。@wjandrea不是;但是,这基本上只是希望您能以某种方式蒙混过关。如果有帮助的话,这里有一个解码器:
'.join(chr(int(c,16)),在re.findall(r%%([0-9A-Fa-f]{2,6}),string))