使用 nokogiri 将内容中的链接替换为 rails 中经过处理的链接

Replacing links in the content with processed links in rails using 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标签**。在这种情况下我该如何处理?

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