Rails Easy HTML Whitelists
有时候我们可能要允许用户使用某些HTML标签,但是必须禁止另外一些HTML标签
我们可以在数据库存储用户输入的内容,包括允许的HTML标签,然后显示时过滤一下
让我们来一个helper方法来过滤内容,有两种方式:
1,写在application_helper.rb里
2,写在lib目录里,然后在config/environment.rb里加上require_dependency 'rails_patch/text_helper'
我们推荐第二种方式,因为这样做与Rails程序松耦合
这样我们就可以在views中使用了:
我们可以在数据库存储用户输入的内容,包括允许的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) %>
莫愁前路无知己,天下无人不识君。