Rails:使用ckeditor提交的内容显示为html标记

use*_*724 3 ckeditor ruby-on-rails-3.2

我有文本字段,用户将编写食品的食谱.对于文本格式,我只需安装ckeditor.

在gemfile中添加了gem"ckeditor"并执行了这个:

   rails generate ckeditor:install --orm=active_record --backend=paperclip
Run Code Online (Sandbox Code Playgroud)

如github.com/galetahub/ckeditor中所述.

然后我将我的食谱文本区域更新为:

   <%= f.cktext_area :recipe, :size => 5, :id => "field-area5", :ckeditor => {:language => "us"}  %>
Run Code Online (Sandbox Code Playgroud)

它正确显示所有格式化工具和格式文本.但是当我提交内容并显示输出时,

   <%= @product.recipe %>
Run Code Online (Sandbox Code Playgroud)

它显示HTML标签而不是我格式化的方式.例如

  <p><strong>Recipe</strong></p> <h1><span style="font-family:georgia,serif"><em>i dont know anything</em></span></h1> 
Run Code Online (Sandbox Code Playgroud)

任何人都能帮助解决这个问题的原因吗?如何显示格式化内容?非常感谢您的帮助.

谢谢.

Mar*_*tto 15

你试过以下吗?

<%= raw(@product.recipe) %>

请查看更多信息:http://api.rubyonrails.org/classes/ActionView/Helpers/OutputSafetyHelper.html#method--raw

  • `html_safe`与使用`raw`一样糟糕.问题与Cross Site Scripting有关.Ckeditor包含样式和html标记,对于那些要显示的内容,您需要呈现未转义的内容.但是,您需要确保内容不包含危险内容.诸如''onclick ='`之类的危险内容或者下载和安装恶意软件的链接,以及其他内容.这就是`sanitize`的用武之地.你可以使用sanitize helper方法剥离某些标签和标签属性.结果是一个`SafeBuffer`,它应该呈现而不需要`raw`或`html_safe` (3认同)