我有一个textarea字段,用户可以在其中输入内容。当在页面上显示他们的条目时,rails会为每个换行符返回\n
,这对于页面上的html显示为没有中断。
根据我收集的内容,解决此问题的标准方法是使用.gsub
命令,将\n
替换为<br />
,然后使用.html_safe
替换以确保<br />
呈现。
问题是,我不想html_safe内容 - 仍然应该替换html,但是<br />
标签应该注入(非转义)内容。
建议表示赞赏。
答案 0 :(得分:16)
simple_format
方法适用于格式化换行符。它将文本块包装在<p>
标记中,并将换行符转换为换行符(<br>
)(双换行符将以下文本分成第二段)。
然而,它不会逃避其他HTML字符,而只是允许它们。对于simple_format
和sanitize的组合应该做得很好。试试这个:
<%=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)
使用<pre>
标记可以避免所有这些。这具有保留标签的优点。例如
<pre><%= @article.body %></pre>