如何使用Python的urllib.parse.urlencode()生成无转义的URL参数?
如何用urllib.parse.urlencode()生成无转义的URL参数拼接字符串
直接使用urllib.parse.urlencode()无法实现完全不转义的需求——这个方法的核心设计就是对URL特殊字符进行编码。不过你可以通过两种方式达成只保留键值对拼接逻辑的目的:
方法一:手动拼接键值对
遍历字典的键值对,用=连接每个键值,再用&拼接所有项,最后可按需添加?前缀:
params = {'name': '张三&李四', 'age': 25, 'city': '北京上海'} query_string = '&'.join([f"{k}={v}" for k, v in params.items()]) full_url = f"?{query_string}" print(full_url) # 输出:?name=张三&李四&age=25&city=北京上海
注意:如果键或值本身包含=或&,会导致参数解析混乱,这种场景需要你自行处理冲突。
方法二:修改urlencode的编码逻辑
利用urlencode的quote_via参数,传入一个不执行任何转义的自定义函数,复用它的拼接逻辑:
from urllib.parse import urlencode def no_escape(s, safe='', encoding=None, errors=None): return s params = {'name': '张三&李四', 'age': 25, 'city': '北京上海'} query_string = urlencode(params, quote_via=no_escape) full_url = f"?{query_string}" print(full_url) # 输出:?name=张三&李四&age=25&city=北京上海
内容的提问来源于stack exchange,提问作者Stack Overflow
相关产品推荐
相关产品推荐

