web-dev-qa-db-ja.com

文字列からHTMLマークアップを削除する方法

私が持っているとしましょう:

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

アプリケーションのさまざまな部分で2つの方法で使用したい:

  • クリック可能なリンク
  • クリック可能なリンクなし(ただし、HTMLマークアップは表示されません)

最初のものはhtml_safeを使用して実行できます:

@string.html_safe

文字列

どうすれば2番目のものを達成できますか?

紐です。

20
gabrielhilal

あなたはこれを試すことができます:

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

strip_tags(html)を参照してください。

42
ant

これを試すことができます:

strip_tags(@string)
8
Manoj Thapliyal

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
2
My God

汎用用途(例:Webスクレーパー):

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

Railsでは、strip_tagsメソッドも参照してください。 http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

1
piratebroadcast

Railsは strip_links 、それはあなたがしたいことをしているようです(その名前を見てください)。

そのAPIDockページ によると、それは少し制限されています。これを任意の文字列に適用するには、文字列クラスを拡張します。

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

だからあなたは使うことができます:

@string.strip_links
0
Veger