Ruby on rails 在不允许所有html标记的情况下解析文本区域中的换行符

Ruby on rails 在不允许所有html标记的情况下解析文本区域中的换行符,ruby-on-rails,escaping,html-safe,Ruby On Rails,Escaping,Html Safe,我有一个textarea字段,用户可以在其中输入内容。在页面上显示条目时,rails会为每个换行符返回\n,对于页面上的html,它显示为完全没有换行符 据我所知,解决这个问题的标准方法是使用.gsub命令,将\n替换为,然后在末尾使用.html\u safe,以确保渲染 问题是,我不想用html保护内容-html仍然应该被替换,但是标签应该被注入(非转义)内容中 感谢您的建议。根据您想做的事情,您可以按原样存储\n,然后在屏幕上显示内容时,使用(h@comment.content).gsub(

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

据我所知,解决这个问题的标准方法是使用
.gsub
命令,将
\n
替换为

,然后在末尾使用
.html\u safe
,以确保

渲染

问题是,我不想用html保护内容-html仍然应该被替换,但是

标签应该被注入(非转义)内容中


感谢您的建议。

根据您想做的事情,您可以按原样存储
\n
,然后在屏幕上显示内容时,使用
(h@comment.content).gsub(“\n”,“
”)
,即首先转义所有HTML标记,然后用

替换
\n
简单格式
方法适合设置换行符的格式。它将文本块包装在
标记中,并将换行符转换为换行符(

)(双换行符将以下文本拆分为第二段)

但是,它不会转义其他html字符,而是允许它们。对于您所追求的内容,
simple\u格式
和。尝试使用以下方法:


%w(br p))%%>

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

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


“h”引用所有HTML特殊字符和“simple_format”,然后将换行符转换为

所有这些都可以通过使用
pre
标记来避免。这样做的好处是还保留了制表符。乙二醇

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

或者更好的是,如果您想在模型或控制器中执行此操作,请使用内置的
h()
方法:
ActionController::Base.helpers.raw ActionController::Base.helpers.sanitize((ActionController::Base.helpers.simple_格式(body)),:tags=>%w(br p))
如何只允许“br”?如果我添加它,它不允许多个“br”行。对于那些现在看到它的人来说,simple_格式现在默认进行清理。