Ruby 允许在文本区域字段表单中复制/粘贴,但删除格式

Ruby 允许在文本区域字段表单中复制/粘贴,但删除格式,ruby,forms,sanitize,Ruby,Forms,Sanitize,我有一个文本区域字段,它允许通过一个非常简单的WYSIWYG(粗体/下划线/项目符号)设置一些文本格式。这是为了在用户的描述配置文件中具有一致的格式 <%= l.text_area :access, value: "#{t('.access_placeholder_html')}" %> 然而,一些用户通常通过直接从其网站复制/粘贴来填充文本区域。他们的具体格式“超文本链接”、字体大小等都反映在我的网站上,这让我的网站有点脏 我怎样才能解决这个问题。理想的情况下,我希望在保存

我有一个文本区域字段,它允许通过一个非常简单的WYSIWYG(粗体/下划线/项目符号)设置一些文本格式。这是为了在用户的描述配置文件中具有一致的格式

 <%= l.text_area :access, value: "#{t('.access_placeholder_html')}" %>

然而,一些用户通常通过直接从其网站复制/粘贴来填充文本区域。他们的具体格式“超文本链接”、字体大小等都反映在我的网站上,这让我的网站有点脏


我怎样才能解决这个问题。理想的情况下,我希望在保存表单时,它能去掉所有不允许的HTML代码,而不是不允许复制/粘贴。这可能吗?我想知道是否应该使用消毒液,但如果应该,如何使用?(很抱歉,新的代码,我想你会理解的)

您没有说明Rails的哪个版本,但是您可以使用
ActionView::Helpers::SanitizeHelper
模块中的
#sanitize
来剥离所有HTML格式。它用洗涤器从文本中过滤HTML。默认的洗涤器允许可选的属性白名单。如果需要对输出进行更多控制,您甚至可以构建自己的自定义洗涤器来修改字符串。该模块还包含
#strip_标记
#strip_链接
,它们是非常简单的洗涤器,可以删除所有HTML标记和所有HTML链接标记(保留链接文本)

请注意,如果用户的输入不是有效的HTML,则可能会出现格式错误的文本

文档中的快速示例:

// remove all HTML tags except <strong> <em> <a> and the 
// <href> attributes from @text
nomarkup_text = sanitize @text, tags: %w(strong em a), attributes: %w(href)

// remove all HTML markup
strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more here</a>...")
返回字符串
,请发送电子邮件至me@email.com.


中,您没有说明Rails的哪个版本,但是您可以使用
ActionView::Helpers::SanitizeHelper
模块中的
#sanitize
来剥离所有HTML格式。它用洗涤器从文本中过滤HTML。默认的洗涤器允许可选的属性白名单。如果需要对输出进行更多控制,您甚至可以构建自己的自定义洗涤器来修改字符串。该模块还包含
#strip_标记
#strip_链接
,它们是非常简单的洗涤器,可以删除所有HTML标记和所有HTML链接标记(保留链接文本)

请注意,如果用户的输入不是有效的HTML,则可能会出现格式错误的文本

文档中的快速示例:

// remove all HTML tags except <strong> <em> <a> and the 
// <href> attributes from @text
nomarkup_text = sanitize @text, tags: %w(strong em a), attributes: %w(href)

// remove all HTML markup
strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more here</a>...")
返回字符串
,请发送电子邮件至me@email.com.


更多详细信息在

还有一件事,您可以将HTML标记存储在数据库中,并在显示之前在视图中进行清理。这样,如果您愿意,将来您可以使用HTML文本做更多的事情。如果你在存储之前扔掉了格式,它就会消失。谢谢你的快速回复和链接。我正在使用Ruby 2.2.1。我应该告诉你,在发布之前我已经看过了消毒文档。所以,如果我选择选项2(在存储之前去掉格式),我应该如何编写它?如何将表单字段和清理组合在一起?最简单的方法是在保存到数据库之前,在将文本_字段指定给模型属性时清理模型中的字符串。如果没有仔细的思考,您就无法实时处理表单_字段(例如,如果未完成的文本不是格式良好的HTML,您会怎么做)。当text_字段失去焦点时,可以运行一些javascript并去掉HTML,但是如果将结果放回text_字段,可能会让用户感到困惑。在选择实现方法之前,您需要准确定义要执行的操作。另外,您可以将HTML标记存储在数据库中,并在显示之前在视图中进行清理。这样,如果您愿意,将来您可以使用HTML文本做更多的事情。如果你在存储之前扔掉了格式,它就会消失。谢谢你的快速回复和链接。我正在使用Ruby 2.2.1。我应该告诉你,在发布之前我已经看过了消毒文档。所以,如果我选择选项2(在存储之前去掉格式),我应该如何编写它?如何将表单字段和清理组合在一起?最简单的方法是在保存到数据库之前,在将文本_字段指定给模型属性时清理模型中的字符串。如果没有仔细的思考,您就无法实时处理表单_字段(例如,如果未完成的文本不是格式良好的HTML,您会怎么做)。当text_字段失去焦点时,可以运行一些javascript并去掉HTML,但是如果将结果放回text_字段,可能会让用户感到困惑。在选择实现方法之前,您需要准确地定义要执行的操作。