使用nokogiri用rails中的已处理链接替换内容中的链接

时间:2018-12-13 17:16:06

标签: ruby-on-rails ruby ruby-on-rails-4 hyperlink nokogiri

我当前正在使用的功能是将内容中的所有链接替换为已处理的链接。为此,我使用Nokogiri(https://github.com/sparklemotion/nokogiri)迭代所有链接。代码在下面

def replace_links(content)

  doc = Nokogiri::HTML(content)
  doc.css("a[href]").each do |link|
    link["href"] =(url_for(
                     controller: "some_controller",
                     action: "some_action",
                     signature: generate_signature))
  end

 content.sub!(content, doc.css('body').inner_html)

end

当我的内容中没有<p>标签时,这非常有用(请看下面添加的图像)。 Nokogiri使用

标签包装内容,如果内容本身具有页面含义,则处理后的内容中将带有意外的** p标签**。在这种情况下我该如何进行?

enter image description here

1 个答案:

答案 0 :(得分:1)

您要使用HTML片段。

尝试一下

def replace_links(content) 
  fragment = Nokogiri::HTML.fragment(content)
  doc.css("a[href]").each do |link| 
    link['href'] = ... 
  end
  return fragment.to_html
end

无需进行sub!黑客攻击,只需返回fragment.to_html