web-dev-qa-db-fra.com

Comment supprimer le balisage HTML de la chaîne

Disons que j'ai:

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

Je souhaite l'utiliser dans différentes parties de mon application de deux manières:

  • Avec un lien cliquable
  • Sans le lien cliquable (sans afficher de balise HTML)

Le premier peut être fait en utilisant html_safe:

@string.html_safe

C'est un string

Comment puis-je atteindre le second?

C'est une ficelle.

19
gabrielhilal

Vous pouvez essayer ceci:

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

Voirstrip_tags (html).

40
ant

Vous pouvez essayer ceci:  

strip_tags(@string)
8
Manoj Thapliyal

Vous pouvez utiliser nokogiri pour faire la même chose. 

Ce SO post raconte l'histoire.

Ici en bref:

Ceci utilise la fonction starts-with de XPath:

Vous devez d’abord le définir comme ceci:

require 'nokogiri'

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

Ce qui précède donnera la sortie HTML. Ensuite, vous pouvez utiliser XPath.

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

Pour un usage général (par exemple, une raclette):

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

Rails fournit une méthode appelée strip_links , qui semble faire ce que vous voulez (en regardant son nom).

D'après sa page APIDock c'est un peu limité. Pour le rendre applicable à une/n'importe quelle chaîne, vous pouvez étendre la classe de chaînes:

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

Pour que vous puissiez utiliser:

@string.strip_links
0
Veger