我有一个 textarea 字段,用户可以在其中输入内容。在页面上显示他们的条目时,rails 会\n
为每个换行符返回,这对于页面上的 html 来说似乎根本没有换行符。
据我所知,解决这个问题的标准方法是一个.gsub
命令,用 替换\n
,<br />
然后.html_safe
在最后用 a 来确保<br />
渲染。
问题是,我不想 html_safe 内容 - 仍应替换 html,但<br />
应将标签注入(非转义)内容中。
建议表示赞赏。
我有一个 textarea 字段,用户可以在其中输入内容。在页面上显示他们的条目时,rails 会\n
为每个换行符返回,这对于页面上的 html 来说似乎根本没有换行符。
据我所知,解决这个问题的标准方法是一个.gsub
命令,用 替换\n
,<br />
然后.html_safe
在最后用 a 来确保<br />
渲染。
问题是,我不想 html_safe 内容 - 仍应替换 html,但<br />
应将标签注入(非转义)内容中。
建议表示赞赏。
该simple_format
方法适用于格式化换行符。它将文本块包装在<p>
标签中,并将换行符转换为换行符 ( <br>
)(双换行符将以下文本分成第二段)。
但是,它不会转义其他 html 字符,而只是允许它们。对于您所追求的simple_format
与sanitize的组合应该做得很好。尝试使用这个:
<%=raw sanitize(simple_format(@article.body), :tags => %w(br p) ) %>
如果您希望在文本区域中输入的 HTML 标记可见,但仍希望显示换行符,请尝试以下操作:
<%= simple_format(h @article.body) %>
"h" 引用所有 HTML 特殊字符,"simple_format" 然后将换行符转换为 <br>。
根据您想要做的,您可以按\n
原样存储 ,然后在屏幕上显示内容时,使用(h @comment.content).gsub("\n", '<br>')
,即首先转义所有 HTML 标记,然后将 替换\n
为<br>
所有这些都可以通过使用<pre>
标签来避免。这也具有保留标签的优点。例如
<pre><%= @article.body %></pre>