Ruby on Rails:如何从文本输入中删除/删除/清理脚本、样式标签?

4
<%= form_for @post.comments.new do |f| %>
    Name:<%= f.text_field :name %><br/>
    Email:<%= f.text_field  :email %><br/>
    Body:<%= f.text_area :content %><br/>
    <%= submit_tag "Comment" %>
<% end %>

我需要删除/清除/消毒<script>..</script><style>..</style>标记。

另一个选项是,如果有任何脚本、样式标记,则该输入字段将被视为空。然后评论将不会被保存。

如何删除那些标记以及这些标记内的代码?如何删除html标签以及标签内的内容?

3个回答

11

我一直在使用sanitize来实现这个目的,它一直表现得非常出色。

将一个常量添加到你的应用程序中:

YourApp::SANITIZE_FILTER = {
  :remove_contents => ['script']
}

接着你可以添加一个辅助方法:

 def sanitize_content(content)
   content = Sanitize.clean(content, YourApp::SANITIZE_FILTER)
 end

6
据我所知,Rails 3 中没有任何功能可以实现此操作。使用 sanitize gem:https://github.com/rgrove/sanitize/
在 Gemfile 中添加 gem 'sanitize',然后运行 bundle install 即可完成。

我为什么要使用Sanitize gem?Rails 3中难道没有任何函数/方法可以完成这个功能吗? - shibly
@guru,据我所知是不行的。他们无法从文档中删除特定的标签。 - Dogbert
这些代码应该添加在哪里?require 'rubygems' require 'sanitize' - shibly
gem 'sanitize' 添加到您的 Gemfile 中,然后运行 bundle install。这样就可以了。 - Dogbert
但是 <br/> 被翻译成了 '&nbsb'。使用那个 sanitize gem 可以去掉 <br/> 吗? - shibly
看起来已经有一个 SanitizeHelper,http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-sanitize,使用它而不是 sanitize gem 能否得到相同的结果? - shibly

2

使用SanitizeHelper来进行过滤

string = '<span id="span_is"><br><br><u><i>Hi</i></u></span>'
strip_tags(string) #This Will give you "Hi"

我在irb中尝试使用strip_tags,但是出现了错误,1.9.2-p180 :010 > strip_tags(string) NoMethodError: undefined method strip_tags' for main:Object from (irb):10 from /path/to/rubies/ruby-1.9.2-p180/bin/irb:16:in <main>' - shibly
2
rails console 中,您可以运行 helper.strip_tags(str) - Dogbert
我得到了以下信息:1.9.2-p180 :015 > helper.strip_tags(string) NameError: undefined local variable or method helper' for main:Object from (irb):15 from /path/to/rubies/ruby-1.9.2-p180/bin/irb:16:in <main>' - shibly
如果在 rails console 中使用,请先尝试 include ActionView::Helpers::SanitizeHelper - allen
strip_tags会移除所有内容。如果你想要清除特定的标签,你需要使用类似以下的代码: scrubber = Rails::Html::TargetScrubber.new scrubber.tags = ['script', 'style']

在视图中

<%= sanitize @comment, scrubber: scrubber %>
- qix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接