允许在text_area字段表单中复制/粘贴,但删除格式

时间:2016-10-19 14:42:08

标签: ruby forms sanitize

我在表单中有一个text_area字段,允许通过非常简单的WYSIWYG(粗体/下划线/项目符号点)进行一些文本格式化。这旨在在用户的描述配置文件中具有一致的格式。

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

尽管如此,有些用户通常会直接从他们的网站上复制/粘贴text_area。他们的特定格式&#34;超文本链接&#34;,字体大小等在我的网站上反映出来后,这有点脏。

我该如何解决这个问题。理想情况下,我希望在保存表单时,它可以删除所有不允许的HTML代码,而不是不允许复制/粘贴。这可能吗?想知道是否应该使用Sanitize,但如果是这样的话怎么样? (对不起新代码,我想你会明白的)。

1 个答案:

答案 0 :(得分:0)

您没有说出哪个版本的Rails,但您可以使用#sanitize模块中的ActionView::Helpers::SanitizeHelper来删除所有HTML格式。它使用scrubber从文本中擦除HTML。默认的scrubber允许选择属性列表。如果您需要更多地控制输出内容,您甚至可以构建自己的自定义滑块来修改字符串。该模块还包含#strip_tags#strip_links,它们是非常简单的清理程序,可以删除所有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>...")

返回字符串Bold no more! See more here...

// remove just the link markup
strip_links('Please e-mail me at <a href="mailto:me@email.com">me@email.com</a>.')

返回字符串Please e-mail me at me@email.com.

API page for SantizeHelper

的详细信息