如何使用Python对字符串进行编码和解码以在URL中使用?

un3*_*33k 4 python string hash urlencode clean-urls

我有一个像这样的字符串:

String A: [ 12234_1_Hello'World_34433_22acb_4554344_accCC44 ]
Run Code Online (Sandbox Code Playgroud)

我想加密字符串A以在干净的URL中使用.这样的事情:

String B: [ cYdfkeYss4543423sdfHsaaZ ]
Run Code Online (Sandbox Code Playgroud)

python中是否有编码API,给定字符串A,它返回String B?在python中是否有解码API,给定String B,它返回String A?

小智 11

请注意,编码和加密之间存在巨大差异.

如果你想发送敏感数据,那么不要使用上面提到的编码;)


Dan*_*und 9

进行编码/解码的一种方法是使用包base64,例如:

import base64
import sys

encoded = base64.b64encode(sys.stdin.read())
print encoded

decoded = base64.b64decode(encoded)
print decoded
Run Code Online (Sandbox Code Playgroud)

这是你在找什么?根据您的具体情况,您将得到:

输入:12234_1_Hello'World_34433_22acb_4554344_accCC44

编码:MTIyMzRfMV9IZWxsbydXb3JsZF8zNDQzM18yMmFjYl80NTU0MzQ0X2FjY0NDNDQ =

已解码:12234_1_Hello'World_34433_22acb_4554344_accCC44


dF.*_*dF. 6

您是否希望对字符串进行加密或编码以删除网址中的非法字符?如果是后者,您可以使用urllib.quote

>>> quoted = urllib.quote("12234_1_Hello'World_34433_22acb_4554344_accCC44")
>>> quoted
'12234_1_Hello%27World_34433_22acb_4554344_accCC44'

>>> urllib.unquote(quoted)
"12234_1_Hello'World_34433_22acb_4554344_accCC44"
Run Code Online (Sandbox Code Playgroud)


Jim*_*imG 5

您是在加密,压缩还是只是urlencoding之后?字符串可以在urlencoding之后传递,但这不会像在示例中那样变小.压缩可能会缩小它,但您仍需要对结果进行urlencode.

您是否真的需要隐藏查看器中的字符串数据(例如,敏感数据,不应该被读取URL的人看到)?

  • 您可能会错误地通过引用来存储数据.也就是说,您在URL中看到的短字符串实际上是会话ID,它引用的数据保留在服务器上.我可能是错的,我不知道有关该网站的任何细节,但这是一个常见的. (2认同)

vir*_*tor 5

要使它真的很短 - >只需在数据库中插入一行.存储类似(id auto_increment, url)元组列表的内容.然后你可以base64编码id来获得一个"代理网址".通过解码id并在数据库中查找正确的url来解码它.或者,如果您不介意标识符看起来是顺序的,只需使用数字即可.