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