我如何使用Ruby的消毒/引入nokogiri访问未标记的元素呢?(How can I use Ru

2019-10-24 06:36发布

我试图建立一个消毒接受任何标签之外的元素可言,如在这个例子中潜在的恶意HTML输入变压器:

out of a tag<p>in a tag</p>out again!

我想有变压器包裹在任何非标记的元素<p>标签使得上述变换成:

<p>out of a tag</p><p>in a tag</p><p>out again!</p>

不幸的是,我无法弄清楚如何选择未标记的元素,因为它不是一个节点。 我敢肯定,我在这里失去了一些东西。 有人可以给我在正确的方向轻推?

Answer 1:

require 'nokogiri'

html = 'out of a tag<p>in a tag</p>out again!'

Nokogiri::HTML(html).at_css('body').children.
  map {|x| '<p>' + x.text + '</p>' }.join('')
#=> "<p>out of a tag</p><p>in a tag</p><p>out again!</p>"

文本存储在文本节点。 由于CSS不能选择文本节点,你将不得不使用其他方法,让他们像Nokogiri::XML::Node#children



文章来源: How can I use Ruby's Sanitize/Nokogiri to access untagged elements?