ruby-on-rails - link_to - image_tag rails
Cómo eliminar el marcado HTML de la cadena (6)
Digamos que tengo:
@string = "it is a <a href="#">string</a>"
Quiero usarlo en diferentes partes de mi aplicación de dos maneras:
- Con un enlace cliqueable
- Sin el enlace en el que se puede hacer clic (pero sin mostrar ninguna marca HTML)
El primero se puede hacer usando html_safe
:
@string.html_safe
Es una cuerda
¿Cómo puedo lograr el segundo?
Es una cuerda.
En Rails, vea también el método strip_tags. strip_tags(html)
Para uso general (por ejemplo, rascador web):
puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello
Puedes usar nokogiri
para hacer lo mismo.
Esta publicación SO cuenta la historia.
Aquí en resumen:
Esto usa la función de starts-with
de XPath:
Primero debes definirlo así:
require ''nokogiri''
item = Nokogiri::HTML(''<a href="#">string</a>'')
puts item.to_html
Lo anterior le dará la salida html. Entonces puedes usar XPath.
item.search(''//a[not(starts-with(@href, "http://"))]'').each do |a|
a.replace(a.content)
end
puts item.to_html
Rails proporciona un método llamado strip_links
, que parece hacer lo que quieres (mirando su nombre).
Según su página APIDock es un poco limitado. Para que sea aplicable a una / cualquier cadena, podría extender la clase de cadena:
class String
def strip_links
ActionController::Base.helpers.strip_links(self)
end
end
Así que puedes usar:
@string.strip_links
Puedes probar esto:
strip_tags(@string)