ファイル名に疑問符が含まれている場合に URL からパスを取得する方法

概要

次のような URL があります。

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

ファイル名に疑問符が含まれている場合 (知っています…)

次のことを試してみると:

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

取得したもの: resource/am_i_a_file

これが当てはまる理由は理解できますが、理想的には次を取得したいと思います:resources/am_i_a_file?.pdf

解決策

この方法でこれにアプローチすることもできます。最初に ? を置き換えます。 URL を解析する前に URL エンコードされた形式で変換し、その後 ? に戻します。パスを取得したら。

require 'uri'
url = 'www.example.com/resources/am_i_a_file?.pdf'
encoded_url = url.gsub('?', '%3F')
uri = URI::parse(encoded_url)
path_raw = uri.path.gsub('%3F', '?')
p path_raw

出力

"www.example.com/resources/am_i_a_file?.pdf"