是否有幂等的urllib.parse.quote版本?该功能应满足:
urllib.parse.quote(x) == urllib.parse.quote(urllib.parse.quote(x))
足够宽的
x
字符串集。如果我在逗号上测试功能,例如:
x = urllib.parse.quote(",")
y = urllib.parse.quote("x")
然后我得到
x = '%2C'
但y = '%252C'
所以它不是逗号的幂等。如果尚不存在这样的功能,您能否描述一个实现?
我在考虑使用:
my_unquote = lambda x: urllib.parse.quote(urllib.parse.unquote(x))
但不确定这是否正确。
问题来自处理已部分编码的URL。
最佳答案
URL编码本质上是非幂等的操作,因为%
符号既是需要编码的一部分输入,也是输出编码的一部分(请参见表here)。这意味着大多数(任何?)URL编码的字符串都将包含字符(%
),这些字符将在以后的编码过程中重新编码。
换句话说,仅通过检查字符串本身就无法知道给定的字符串是否已被URL编码。这使得编写幂等编码函数很困难,甚至可能是不可能的。
根据您的用例,可以使用一些特定于域的变通办法来模拟幂等。例如,如果您知道给定URL的路径部分已编码,但方案未编码,则可以仅对方案运行编码。
关于python - 是否有urllib.parse.quote的幂等版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55426439/