原创作者: hideto   阅读:964次   评论:0条   更新时间:2011-05-26    
有时候我们可能要允许用户使用某些HTML标签,但是必须禁止另外一些HTML标签
我们可以在数据库存储用户输入的内容,包括允许的HTML标签,然后显示时过滤一下
让我们来一个helper方法来过滤内容,有两种方式:
1,写在application_helper.rb里
2,写在lib目录里,然后在config/environment.rb里加上require_dependency 'rails_patch/text_helper'
我们推荐第二种方式,因为这样做与Rails程序松耦合
EasyHTMLWhitelists/lib/rails_patch/text_helper.rb
module ActionView
  module Helpers
    module TextHelper
      ALLOWED_TAGS = %w(a img) unless defined?(ALLOWED_TAGS)

      def whitelist(html)
        # only do this if absolutely necessary
        if html.index("<")
          tokenizer = HTML::Tokenizer.new(html)
          new_text = ""

          while token = tokenizer.next
            node = HTML::Node.parse(nil, 0, 0, token, false)
            new_text << case node
                        when HTML::Tag
                          if ALLOWED_TAGS.include?(node.name)
                            node.to_s
                          else
                            node.to_s.gsub(/</, "LT")
                          end
                        else
                          node.to_s.gsub(/</, "LT")
                        end
          end

          html = new_text
        end
        html
      end
    end
  end
end

这样我们就可以在views中使用了:
<%= whitelist(@the_data) %>
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics