html - 在 Ruby 中删除特定的 HTML 元素

标签 html ruby

我已经在 Ruby 中看到了基于白名单的 HTML sanitizer ,但我需要相反的方法,我只需要从页面中删除链接以准备好进行 PDF 转换。我尝试了 Sanitize,但它不符合我的需要,因为很难猜测将在获取的页面上使用哪些 HTML 元素,因此我无法将它们添加到列表中。

如果我的输入是

<a href="link">Link!</a>
<b>Bold Text</b>
<div>A div!</div>

我愿意

Link!
<b>Bold Text</b>
<div>A div!</div>

作为输出。

是否有针对 Ruby 的“基于黑名单的 sanitizer ”?

最佳答案

Tin Man 答案的细微变化,仍然使用 Nokogiri :

require 'nokogiri' # gem install nokogiri
doc = Nokogiri.HTML( my_html )
doc.css('a,blink,marquee').each do |el|
  el.replace( el.inner_html )
end
cleaned = doc.to_html

这里的两个区别是:

  1. 使用 css 而不是 search 可以稍微更具体地了解正在使用的选择器(虽然它没有提供任何功能差异),但更重要的是

  2. 通过替换为 inner_html,我们保留了链接内可能的标记。例如,给定标记:

    <p><a href="foo">Hi <b>Mom</b></a>!</p>
    

    然后替换为 .content 会产生:

    <p>Hi Mom!</p>
    

    而替换为 .inner_html 会产生:

    <p>Hi <b>Mom</b>!</p>
    

关于html - 在 Ruby 中删除特定的 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319407/

相关文章:

javascript - 如何检测 iFrame 何时进入全屏?

html - Flexbox 不会拉伸(stretch)添加更多内容

html - 告诉 Flying Saucer 或 BIRT 缩放 html 以适应单个 pdf 页面

ruby - 从 'cat' 输出着色 ruby​​ 语法

ruby - 带有 asciidoc/markdown 输入、html/pdf 输出的发布工具链

html - 如何将变量值附加到 th :href in thymeleaf

html - CSS 仅选择直接子项

ruby-on-rails - Rails 中的 will_paginate 嵌套对象

mysql - Ruby on Rails : Two Models Both Have Has/Many and Belongs_to

ruby - Puppet 4.3.2 客户端节点无法通过 SSL 连接到 Puppet 服务器