0

我有包含图像标签的 HTML 文档。我需要挑选出每个图像标签的源属性并指定一个完整路径而不是已经存在的相对路径。也就是追加绝对路径。

当前版本 :

<img src = '/assets/rails.png' />

改造后:

<img src = 'http://localhost:3000/assets/rails.png' />

在 RoR 中最干净、最有效的方法是什么?

添加

我将使用转换后的 HTML 作为字符串并将其传递给 IMgKit gem 以转换为图像。

4

2 回答 2

3

很难判断您的意思是您有 HTML 模板,例如 HAML 或 ERB,还是真正的 HTML 文件。如果您尝试操作 HTML 文件,您应该使用 Nokogiri 来解析和更改src参数:

require 'nokogiri'
require 'uri'

html = '<html><body><img src="/path/to/image1.jpg"><img src="/path/to/image2.jpg"></body></html>'
doc = Nokogiri.HTML(html)

doc.search('img[src]').each do |img|
  img['src'] = URI.join('http://localhost:3000', img['src']).to_s
end

puts doc.to_html

哪个输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<img src="http://localhost:3000/path/to/image1.jpg"><img src="http://localhost:3000/path/to/image2.jpg">
</body></html>

您可以通过src各种方式对参数进行操作,但使用 URI 的优势在于它知道 URL 需要遵循的各种曲折。使用或文本操作重写参数gsub需要您注意所有这些,并且可能会出现意想不到的编码问题。

于 2013-05-13T15:38:41.467 回答
0

You can create a helper method so you can use it everywhere

def full_image_path(image)
  request.protocol + request.host_with_port + image.url
end
于 2013-05-13T15:05:18.797 回答