首页 > 解决方案 > 使用 nokogiri 将内容中的链接替换为 rails 中的已处理链接

问题描述

我目前正在研究的功能是将内容中的所有链接替换为已处理的链接。为此,我正在使用 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标记**。在这种情况下我该如何进行?

在此处输入图像描述

标签: ruby-on-railsrubyruby-on-rails-4hyperlinknokogiri

解决方案


您想使用 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!黑客,只需 return fragment.to_html


推荐阅读