如何从字符串中删除 HTML 标记

Posted

技术标签:

【中文标题】如何从字符串中删除 HTML 标记【英文标题】:How to remove HTML markup from string 【发布时间】:2013-02-21 12:05:12 【问题描述】:

假设我有:

@string = "it is a <a href="#">string</a>"

我想以两种方式在我的应用程序的不同部分使用它:

带有可点击的链接 没有可点击的链接(但不显示任何 html 标记)

第一个可以使用html_safe:

@string.html_safe

这是一个string

我怎样才能实现第二个?

这是一个字符串。

【问题讨论】:

可能重复:***.com/questions/7414267/… 【参考方案1】:

你可以试试这个:

ActionView::Base.full_sanitizer.sanitize(@string)

strip_tags(html)

【讨论】:

【参考方案2】:

你可以试试这个:

strip_tags(@string)

【讨论】:

【参考方案3】:

用于一般用途(例如网络爬虫):

puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello

【讨论】:

【参考方案4】:

您可以使用nokogiri 来做同样的事情。

SO post 讲述了这个故事。

简而言之:

这使用了 XPath 的 starts-with 函数:

你必须先这样定义它:

require 'nokogiri'

item = Nokogiri::HTML('<a href="#">string</a>')
puts item.to_html

上面将给出 html 输出。然后你可以使用 XPath。

item.search('//a[not(starts-with(@href, "http://"))]').each do |a|
  a.replace(a.content)
end
puts item.to_html

【讨论】:

【参考方案5】:

在 Rails 中,另见 strip_tags 方法。 http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

【讨论】:

【参考方案6】:

Rails 提供了一个名为strip_links 的方法,它似乎可以做你想做的事(看它的名字)。

根据its APIDock page 有点受限。要使其适用于/任何字符串,您可以扩展字符串类:

class String
  def strip_links
    ActionController::Base.helpers.strip_links(self)
  end
end

所以你可以使用:

@string.strip_links

【讨论】:

如果字符串没有 html 标记,strip_links 会给出错误。扩展该方法不会产生错误,但不适用于某些标记,例如 。不过还是谢谢。 哦...我认为/假设您的字符串中总是有一个链接...我猜sanitize method 删除了所有 HTML...(它在同一个 Helper 模块中)跨度> 【参考方案7】:

受楼上的启发,我在我的项目中定义了这个函数

 def delete_html_markup(data)
    return data if data.blank?
    if data.is_a?(Array)
      data.map | s |  delete_html_markup(s)  
    elsif data.is_a?(Hash)
      data.each do | k, v |
        data[k] = delete_html_markup(v)
      end
    else
      ActionView::Base.full_sanitizer.sanitize(data)
    end
  end

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review

以上是关于如何从字符串中删除 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除 HTML 标记

从 Python 字符串中删除不在允许列表中的 HTML 标记

从字符串中删除 HTML 标记并保留“:”(冒号)[重复]

从字符串中删除 html 标记

JavaScript 从字符串中删除HTML标记

从 javascript 字符串中删除特定的 HTML 标记及其内容