Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing newline characters in textareas without allowing all html tags

I have a textarea field where users can enter content. When it comes to displaying their entry on a page, rails returns \n for each line break, which appears as no break at all for html on the page.

From what I gather, the standard way of getting around this is a .gsub command, replacing \n with <br />, and then a .html_safe on the end to ensure the <br /> renders.

The problem is, I don't want to html_safe the content - html should still be replaced, but <br /> tags should be injected into the (non-escaped) content.

Suggestions appreciated.

like image 693
PlankTon Avatar asked Nov 23 '10 07:11

PlankTon


2 Answers

The simple_format method is good for formatting line breaks. It wraps text blocks in <p> tags, and converts newline characters into line breaks (<br>) (double newlines breaks the following text into a second paragraph).

It doesn't however escape other html characters, and instead just allows them. For what you're after a combination of simple_format along with sanitize should do nicely. Try using this:

<%=raw sanitize(simple_format(@article.body), :tags => %w(br p) ) %>

like image 84
Jeremy Avatar answered Sep 30 '22 16:09

Jeremy


If you want HTML tags entered in the text area visible, but still want line breaks to show, try this:

<%= simple_format(h @article.body) %>

The "h" quotes all the HTML special chars and "simple_format" then converts the line breaks to <br>.

like image 26
Anders Kindberg Avatar answered Sep 30 '22 16:09

Anders Kindberg