Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove all html tags from attributes in rails

I have a Project model and it has some text attributes, one is summary. I have some projects that have html tags in the summary and I want to convert that to plain text. I have this method that has a regex that will remove all html tags.

def strip_html_comments_on_data
  self.attributes.each{|key,value| value.to_s.gsub!(/(<[^>]+>|&nbsp;|\r|\n)/,"")}
end

I also have a before_save filter

before_save :strip_html_comments_on_data

The problem is that the html tags are still there after saving the project. What am I missing?

And, is there a really easy way to have that method called in all the models?

Thanks,

Nicolás Hock Isaza

like image 476
Hock Avatar asked Apr 05 '10 00:04

Hock


2 Answers

untested

include ActionView::Helpers::SanitizeHelper

def foo
  sanitized_output = sanitize(html_input)
end

where html_input is a string containing HTML tags.

EDIT

You can strip all tags by passing :tags=>[] as an option:

plain_text = sanitize(html_input, :tags=>[])

Although reading the docs I see there is a better method:

plain_text = strip_tags(html_input)

Then make it into a before filter per smotchkiss and you're good to go.

like image 95
zetetic Avatar answered Sep 28 '22 03:09

zetetic


It would be better not to include view helpers in your model. Just use:

HTML::FullSanitizer.new.sanitize(text)
like image 44
wanderfalke Avatar answered Sep 28 '22 05:09

wanderfalke