2010-03-31 137 views
1

我試圖從包含其他幾個元素的HTML塊中刪除所有相對圖像路徑斜槓。使用正則表達式刪除相對路徑斜槓

例如

<img src="../../../../images/upload/1/test.jpg /> 

需要成爲

<img src="http://s3.amazonaws.com/website/images/upload/1/test.jpg" /> 

我想寫這爲軌道幫手,正好路過整個塊進入的方法,並利用引入nokogiri或Hpricot來解析HTML,但我不知道。考慮到頁面的絕對URL和相對路徑

html = '<img src="../../../../images/upload/1/test.jpg />' 
absolute_uri = "http://s3.amazonaws.com/website/images" 
html.gsub(/(\.\.\/)+images/, absolute_uri) 
+2

是否有你爲什麼指定經常一個特別的原因表情?他們不太適合這個問題;我想你是把馬車放在馬前。如果您編輯標題以刪除引用,您可能會得到更好的回覆。 – 2010-03-31 16:05:26

回答

3

無需推倒重來,當內置的「URI」 LIB能爲你做的:

require 'uri' 
main_path = "http://s3.amazonaws.com/website/a/b/c" 
relative_path = "../../../../images/upload/1/test.jpg" 

URI.join(main_path, relative_path).to_s 
    # ==> "http://s3.amazonaws.com/images/upload/1/test.jpg" 
+0

方便。我以爲你不得不使用URI.parse(...).path和一些File.expand_path來做到這一點。 – tadman 2010-03-31 17:58:43

+0

URI.join()是我如何一直這樣做的。作爲URI的替代品,Addressable :: URI是一個很好的模塊,因爲它具有更全面的功能,特別是如果您需要使用IDNA類型的URL。 http://en.wikipedia.org/wiki/Internationalized_domain_name – 2010-04-01 16:44:12

1

這一塊可能會幫助在該頁面︰

pageurl = 'http://s3.amazonaws.com/website/foo/bar/baz/quux/index.html' 
relative = '../../../../images/upload/1/test.jpg' 
absolute = pageurl.sub(/\/[^\/]*$/, '') 
relative.split('/').each do |d| 
    if d == '..' 
    absolute.sub!(/\/[^\/]*$/, '') 
    else 
    absolute << "/#{d}" 
    end 
end 
p absolute 

Alternat結構延續,你能欺騙了一下:

'http:/'+File.expand_path(File.dirname(pageurl.sub(/^http:/, ''))+'/'+relative) 
+0

當然,這隻適用於所有圖像都在相同路徑下並且事先知道此路徑的情況。 – Arkku 2010-03-31 14:33:48

3

一種方式來構建絕對路徑:

任何幫助將是巨大的

乾杯 亞當