5

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

据我所知,解决这个问题的标准方法是一个.gsub命令,用 替换\n<br />然后.html_safe在最后用 a 来确保<br />渲染。

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

建议表示赞赏。

4

4 回答 4

16

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

但是,它不会转义其他 html 字符,而只是允许它们。对于您所追求的simple_formatsanitize的组合应该做得很好。尝试使用这个:

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

于 2010-11-23T07:54:38.783 回答
6

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

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

"h" 引用所有 HTML 特殊字符,"simple_format" 然后将换行符转换为 <br>。

于 2011-01-31T09:23:49.477 回答
2

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

于 2010-11-23T07:39:55.103 回答
0

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

&lt;pre&gt;&lt;%= @article.body %&gt;&lt;/pre&gt;
于 2014-08-01T05:03:01.037 回答