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

当文件名包含问号时,如何从URL中获取完整路径?

问题描述

我有如下URL:

url = www.example.com/resources/am_i_a_file?.pdf

其中文件名包含一个问号(我知道这不太合理)。当我执行以下Ruby代码时:

uri = URI::parse(url)
path_raw = uri.path

得到的结果是:resources/am_i_a_file,但我需要获取到:resources/am_i_a_file?.pdf

解决方法

因为URI规范中,问号是路径与查询参数的分隔符,URI::parse会默认将问号前的内容识别为路径,问号后的内容识别为查询参数(即便后面没有实际参数)。要保留路径里的问号,有两种可行方式:

方式一:提前编码URL中的问号

将URL里的问号替换为URL编码值%3F,这样解析时会把它当作路径的一部分:

url = "www.example.com/resources/am_i_a_file?.pdf"
# 替换路径中的问号为编码值
encoded_url = url.gsub('?', '%3F')
uri = URI.parse(encoded_url)
# 此时uri.path为编码后的路径,如需还原问号可解码
require 'cgi'
decoded_path = CGI.unescape(uri.path)
puts decoded_path # 输出 resources/am_i_a_file?.pdf

方式二:手动拼接路径与问号后的内容

如果不想提前编码,可以判断原URL包含问号且无实际查询参数时,手动将问号及后续内容拼回路径:

url = "www.example.com/resources/am_i_a_file?.pdf"
uri = URI.parse(url)
path_raw = uri.path
# 检查URL含问号且无查询参数时拼接内容
if url.include?('?') && uri.query.nil?
  path_raw += '?' + url.split('?', 2)[1]
end
puts path_raw # 输出 resources/am_i_a_file?.pdf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:22:09