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:
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.
Vous pouvez essayer ceci:
strip_tags(@string)
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
Pour un usage général (par exemple, une raclette):
puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello
Dans Rails, voir aussi la méthode strip_tags. http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
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