SanitizeHelper删除允许的标签

时间:2018-08-20 16:27:46

标签: ruby-on-rails ruby ruby-on-rails-4

这是我要清除的示例注释:

"<p><strong>hello</strong><em></em> <em>there</em> <a href=\"https://google.com\" title=\"Test\" target=\"_blank\">whats</a> up?</p><p><ul><li>this&nbsp;</li><li>is a</li><li>list</li></ul><p>and then there was more</p><p><ol><li>do this</li><li>do that</li></ol><p><img src=\"https://google.com\" alt=\"\"><br></p></p></p>"

我尝试使用以下命令进行消毒:

sanitize comment.text, tags: %w(p, strong, em, a, blockquote, img, ol, ul, li), attributes: %w(href, target, title)

输出为:

"hello there whats up?<li>this </li><li>is a</li><li>list</li>and then there was more<li>do this</li><li>do that</li>"

如您所见,li元素没有嵌套在它们各自的有序列表和无序列表中,并且我尝试允许的所有其他标签也被删除了。

1 个答案:

答案 0 :(得分:4)

使用特殊的数组创建器(例如%w()时,您不想使用逗号:

%w(p, strong, em, a, blockquote, img, ol, ul, li)
# => ["p,", "strong,", "em,", "a,", "blockquote,", "img,", "ol,", "ul,", "li"]

删除这些内容,一切应开始为您工作。 (您会注意到li起作用,因为作为最后一个元素,它不包含结尾的逗号)