tag rails link_to image_tag content_tag ruby-on-rails ruby-on-rails-3 html-safe

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.



Para uso general (por ejemplo, rascador web):

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


Puedes probar esto:

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

Ver strip_tags(html) .


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)