在textareas中解析换行符而不允许所有html标签

时间:2010-11-23 07:23:57

标签: ruby-on-rails escaping html-safe

我有一个textarea字段,用户可以在其中输入内容。当在页面上显示他们的条目时,rails会为每个换行符返回\n,这对于页面上的html显示为没有中断。

根据我收集的内容,解决此问题的标准方法是使用.gsub命令,将\n替换为<br />,然后使用.html_safe替换以确保<br />呈现。

问题是,我不想html_safe内容 - 仍然应该替换html,但是<br />标签应该注入(非转义)内容。

建议表示赞赏。

4 个答案:

答案 0 :(得分:16)

simple_format方法适用于格式化换行符。它将文本块包装在<p>标记中,并将换行符转换为换行符(<br>)(双换行符将以下文本分成第二段)。

然而,它不会逃避其他HTML字符,而只是允许它们。对于simple_formatsanitize的组合应该做得很好。试试这个:

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

答案 1 :(得分:6)

如果您希望文本区域中输入的HTML标记可见,但仍希望显示换行符,请尝试以下操作:

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

“h”引用所有HTML特殊字符,然后“simple_format”将换行符转换为&lt; br&gt;。

答案 2 :(得分:2)

根据您的目的,您可以按原样存储\n,然后在屏幕上显示内容时,使用(h @comment.content).gsub("\n", '<br>'),即首先转义所有HTML标记,然后将\n替换为<br>

答案 3 :(得分:-1)

使用&lt;pre&gt;标记可以避免所有这些。这具有保留标签的优点。例如

&lt;pre&gt;&lt;%= @article.body %&gt;&lt;/pre&gt;