2012-02-28 14 views
1

我安装了CKEditor的宝石:如何使Rails应用程序呈现由ckeditor gem生成的HTML?

https://github.com/galetahub/ckeditor

我跟所有的步骤,我展示它是这样的:

<%= form_for(@post) do |f| %> 
    <%= render 'shared/error_messages' %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.cktext_area :content, :input_html => { :value => "Default value" } %> 
    </div> 
    <div class="field"> 
    <%= f.label :tag_name %> 
    <%= f.autocomplete_field :tag_name, autocomplete_tag_name_posts_path, :"data-delimiter" => ' ' %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

,这是我展示的内容:

<p><%= @post.content %></p><br /> 

但输出是实际的HTML标签。例如:

​​

我怎样才能让它实际呈现最终的HTML?

回答

6

Rails的默认转义输出,所以你必须使用原料:

<p><%= raw @post.content %></p> 

要小心使用原始虽然,它会打开你到XSS攻击,如果你允许非信任用户输出HTML上您的网站。

+0

谢谢。那么为了避免这种情况下的XSS攻击,通常要做些什么? – alexchenco 2012-02-28 02:04:57

+0

说实话,我从来没有遇到过允许用户输入HTML的情况,所以我不能100%确定要做的最好的事情。尽管使用[sanitize](http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html)助手将绝对必要的HTML元素/属性列入白名单应该足够了。 – pjumble 2012-02-28 10:29:00

0

对不起,我以前的答案出错了。这就是我的意思:我会用

(@ post.content).html_safe

,因为它比用 '原始' 更安全。

相关问题