QA@IT

imgタグの相対パスを絶対パスに変換するには?

imgタグに下記のように相対パスで指定されているものを絶対パスに変換する際、何か良い方法はありますでしょうか?

<img src="../img/200801/yusha_haruhi_05.jpg" width="308" height="296">

現在は下記のようにわりと泥臭い感じでeachを回してFile.expand_pathで生成しているのですが、より簡単な実装方法は無いでしょうか?
また、下記のやり方で絶対パスに変換出来ないケースがあれば指摘して頂きたいです。
(元々imgタグに絶対パスで指定されているものについては、事前の処理で除外する前提です。)

source_url = "http://www.figma.jp/products/2008/fig0801-01.html"

source_array = source_url.split("/")
base_path = ""

source_array.each{ |path|
  if path.present? and path != source_array.first and path != source_array.last
    base_path += "/#{path}"
  end
}

image_path = "#{source_array.first}/#{File.expand_path( image_path, base_path )}"
 # => "http://www.figma.jp/products/img/200801/yusha_haruhi_05.jpg"

回答

標準添付ライブラリ uri を使うと楽です。

require "uri"
base_uri = URI.parse("http://www.figma.jp/products/2008/fig0801-01.html")
image_uri = (base_uri + "../img/200801/yusha_haruhi_05.jpg").to_s # => "http://www.figma.jp/products/img/200801/yusha_haruhi_05.jpg"

参考:
URI::Generic#+
http://doc.ruby-lang.org/ja/1.9.3/method/URI=3a=3aGeneric/i/=2b.html

編集 履歴 (0)
  • おお、ありがとうございます。シンプルで良いですね。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。

この質問に回答する


この質問の答えをご存知ですか? ぜひ質問者に伝えてあげてください (ログインすると、回答フォームが表示されます)。

ログイン