1
<%= 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>标签。Ruby on Rails:我如何从文本输入中删除/删除/清理脚本,样式标记?

其他选项是如果有任何脚本,样式标签,那么输入字段将被视为空。然后评论将不会被保存。

我如何删除这些标签和这些标签内的代码?我怎样才能删除HTML标签和HTML标签内的内容?

回答

6

据我所知,在Rails 3中没有任何东西可以做到这一点。使用sanitize宝石。

gem 'sanitize'添加到您的Gemfile中,并运行bundle install。只有这一点应该做到。

+0

为什么要使用消毒宝石?轨3中没有任何功能/方法可以做到这一点? – shibly

+0

@guru,不是我所知道的。他们无法从文档中删除特定的标签。 – Dogbert

+0

我在哪里添加这些行? require'rubygems' require'sanitize' – shibly

2

使用SanitizeHelper

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

我试图在IRB用strip_tags>但遇到错误,1.9.2-P180:010>用strip_tags(字符串) NoMethodError:从(IRB)对象 \t:未定义的方法'用strip_tags'的主要10 \t从/路径/要/rubies/ruby-1.9.2-p180/bin/irb:16:in'

' – shibly

+1

在'rails console'中,你可以运行'helper.strip_tags(str)' – Dogbert

+0

我得到了,1.9.2-p180:015> helper.strip_tags(string) NameError:未定义的局部变量或方法'helper'for main:Object \t from(irb):15 \t from /path/to/rubies/ruby-1.9.2-p180/bin/irb :16:'

' – shibly

8

我一直在使用消毒为此确切的目的。它工作得很好。

添加一个常数,你的应用程序:

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

然后你就可以添加一个辅助方法:

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