使用 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
.
我目前正在开发的功能是将内容中的所有链接替换为经过处理的链接。为此,我正在使用 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
.