我试图建立一个消毒接受任何标签之外的元素可言,如在这个例子中潜在的恶意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>
不幸的是,我无法弄清楚如何选择未标记的元素,因为它不是一个节点。 我敢肯定,我在这里失去了一些东西。 有人可以给我在正确的方向轻推?
我试图建立一个消毒接受任何标签之外的元素可言,如在这个例子中潜在的恶意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>
不幸的是,我无法弄清楚如何选择未标记的元素,因为它不是一个节点。 我敢肯定,我在这里失去了一些东西。 有人可以给我在正确的方向轻推?
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
。