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

时间:2013-03-06 15:45:29

标签: ruby-on-rails ruby-on-rails-3 html-safe

让我说我有:

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

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

  • 使用可点击链接
  • 没有可点击的链接(但没有显示任何HTML标记)

第一个可以使用html_safe

完成
@string.html_safe

这是string

如何实现第二个?

这是一个字符串。

6 个答案:

答案 0 :(得分:40)

你可以试试这个:

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

请参阅 strip_tags(html)

答案 1 :(得分:8)

你可以试试这个:

strip_tags(@string)

答案 2 :(得分:2)

您可以使用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

答案 3 :(得分:2)

用于一般用途(例如网络刮刀):

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

答案 4 :(得分:1)

答案 5 :(得分:0)

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

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

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

所以你可以使用:

@string.strip_links