使用 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
从href html标签中提取带有红宝石中nokogiri的链接(URL)?