Rails用'Hello&'保存标题作为'你好&'为什么?

时间:2011-11-08 04:40:57

标签: ruby-on-rails ruby-on-rails-3

我有一个带有标题字段的模型。当我发布到服务器时,我看到:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"3Le7aLitPd6MzWFeB0ofI9wk1IuhybNswjG9N+KgJJc=", "poll"=>{"title"=>"Hello &"}}

问题是DB然后保存为:

Hello &

所以稍后当我在网站上输出字段时,它显示为Hello &

处理此问题的正确方法是什么?我希望支持输入&,但同时不允许用户提交html或js标记。

由于

1 个答案:

答案 0 :(得分:1)

Sanitize.clean输出HTML,而不是纯文本,因此您的&符号会转换为HTML实体形式(即&)。例如,直接来自fine manual

  

Sanitize.clean(html, Sanitize::Config::RESTRICTED) # => '<b>foo</b>'

事实上,您实际上是存储HTML片段而不是纯文本片段。你应该使用

<%= raw @thing.title %>

显示您的标题,因为它们已被Sanitize呈现为HTML安全。