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

Posted

技术标签:

【中文标题】使用 nokogiri 将内容中的链接替换为 rails 中的已处理链接【英文标题】:Replacing links in the content with processed links in rails using nokogiri 【发布时间】:2019-05-14 23:21:33 【问题描述】:

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

【问题讨论】:

【参考方案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! hack,只需返回fragment.to_html

【讨论】:

以上是关于使用 nokogiri 将内容中的链接替换为 rails 中的已处理链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用nokogiri找到具有共同最近祖先的相同深度的所有链接

如何使用 Nokogiri 获取没有任何文本内容的完整 HTML

我无法解析页面并获取链接 Nokogiri

从href html标签中提取带有红宝石中nokogiri的链接(URL)?

将添加到购物车按钮替换为链接到 WooCommerce 3 中商店页面上的产品页面的更多内容

将 Nokogiri 文档转换为 Ruby 哈希