2012-03-08 89 views
2

如果用户忘记关闭html标签,有什么方法可以关闭吗?例如。当用户输入是:Rails - 在表单中输入html时关闭html标签

<b>small</b><i>test 

是否有Rails的一种自动添加结束</i>标签,让所有以下HTML不会是斜体?

我用.html_safe来解释所有的html,但我也想终止<i>

+0

你知道在用户输入中使用'.html_safe'是非常不安全的吗?尝试阅读[Cross-site scripting(XSS)](http://en.wikipedia.org/wiki/Cross-site_scripting)。 – Mischa 2012-03-08 08:36:03

回答

0

Rails不能这样对你。

你可以使用像Haml或Slim这样的模板系统不要忘记。

你也可以用你自己的编辑器来做。

0

一个体面的做法是将输入提供给dom解析器,然后让解析器输出正确的HTML。

请注意,这并非万无一失,如果用户犯了太多错误,解析器将不知道该怎么做。

我建议Nokogiri

4

Rails的没有任何内置的能力做到这一点,但是你有两个选择:

  1. 引入nokogiri - 易于安装在几乎所有平台( gem install nokogiri
  2. Tidy - 第二柱具有在Linux中使用它的细节和窗户

使用nokogori你可以简单地做到:

html = "<b>small</b><i>test" 
clean = Nokogiri::HTML::DocumentFragment.parse(html).to_html 
# clean = "<b>small</b><i>test</i>"