Rails Easy HTML Whitelists

有时候我们可能要允许用户使用某些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

Java代码
  1. module ActionView  
  2.   module Helpers  
  3.     module TextHelper  
  4.       ALLOWED_TAGS = %w(a img) unless defined?(ALLOWED_TAGS)  
  5.   
  6.       def whitelist(html)  
  7.         # only do this if absolutely necessary  
  8.         if html.index("<")  
  9.           tokenizer = HTML::Tokenizer.new(html)  
  10.           new_text = ""  
  11.   
  12.           while token = tokenizer.next  
  13.             node = HTML::Node.parse(nil, 00, token, false)  
  14.             new_text << case node  
  15.                         when HTML::Tag  
  16.                           if ALLOWED_TAGS.include?(node.name)  
  17.                             node.to_s  
  18.                           else  
  19.                             node.to_s.gsub(/</, "LT")  
  20.                           end  
  21.                         else  
  22.                           node.to_s.gsub(/</, "LT")  
  23.                         end  
  24.           end  
  25.   
  26.           html = new_text  
  27.         end  
  28.         html  
  29.       end  
  30.     end  
  31.   end  
  32. end  

这样我们就可以在views中使用了:
Java代码
  1. <%= whitelist(@the_data) %> 

 

 

posted @ 2009-07-02 11:26  麦飞  阅读(282)  评论(0编辑  收藏  举报