You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Flask自动转义URL中的百分号编码?

区分URL中的普通短横与编码短横:获取原始请求路径

嘿,这个问题我之前处理URL编码字符区分的时候也踩过坑!你遇到的核心问题是request.full_path会自动对URL进行解码,所以%2D(短横的URL编码形式)会被转换成普通的-,导致你没法区分两者。不过别担心,有办法拿到更原始的请求路径形式。

为什么request.full_path会这样?

request.full_path返回的是已经解码后的路径加上查询参数,这是Rails(以及很多Web框架)默认的行为——它会自动把URL编码的字符转换成对应的原始字符,方便开发者直接使用,但这就丢失了原始的编码信息。

获取原始编码的请求路径

在Rails里,你可以直接访问请求环境变量里的REQUEST_URI,它会完整保留客户端发送过来的原始URL(包括所有编码字符):

# 在控制器中获取原始请求URI
original_uri = request.env['REQUEST_URI']
# 对于你的请求,这个变量会返回:
# /video/RIHANNA%3A-FENTY-BEAUTY-%2D-Review-%2B-First-Impressions?v=N_zDcuX1Y54

如果你只需要路径部分(不带后面的查询参数),可以简单拆分一下:

original_path = request.env['REQUEST_URI'].split('?').first
# 结果就是:/video/RIHANNA%3A-FENTY-BEAUTY-%2D-Review-%2B-First-Impressions

其他框架的类似思路

如果你用的是其他Web框架,原理是一样的:找服务器提供的原始请求URI环境变量。比如:

  • Sinatra中同样可以用request.env['REQUEST_URI']
  • Python Flask中可以使用request.url(完整原始URL)或者拆分request.url来单独获取编码后的路径部分

这样你就能精准区分普通短横和经过URL编码的短横了!

内容的提问来源于stack exchange,提问作者dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:40:41