Coderay呈现实际的ruby代码

时间:2014-09-26 10:01:05

标签: ruby-on-rails ruby syntax-highlighting redcloth coderay

我安装了带有Coderay的RedCloth,以突出显示我在博客中粘贴的代码。

如果我粘贴一些这样的代码:

 CodeRay.scan(
"set_meta_tags :og => {
        :title => @blog.title,
        :type => 'article',
        :url => current_url,
        :image => @blog.blog_images.first.image.url,
        :article => {:published_time => @blog.created_at.to_time.iso8601,
                     :modified_time => @blog.updated_at.to_time.iso8601,
                     :author => 'Name',
                     :section => @blog.categories.first.name,
                     :tags => @blog.categories.map(&:name).join(', ')
        }}",
:ruby).div(:css => :class)

我得到了这个

set_meta_tags :og => {

        :title => blog</span>.title,
        <span class="symbol">:type</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">article</span><span class="delimiter">'</span></span>,
        <span class="symbol">:url</span> =&gt; current_url,
        <span class="symbol">:image</span> =&gt; <span class="instance-variable">blog.blog_images.first.image.url,

        :article => {:published_time => blog</span>.created_at.to_time.iso8601,
                     <span class="symbol">:modified_time</span> =&gt; <span class="instance-variable">blog.updated_at.to_time.iso8601,

                     :author => ‘Name’,

                     :section => blog</span>.categories.first.name,
                     <span class="symbol">:tags</span> =&gt; <span class="instance-variable">blog.categories.map(&:name).join(‘, ’)

        }}

我该怎样摆脱它?

非常感谢

1 个答案:

答案 0 :(得分:0)

在视图中输出标记之前,您可以通过sanitize传递标记。这将保留无害的html标签,但会删除可能有害的内容,例如<script>

<%= sanitize CodeRay.scan(..., :ruby).div(:css => :class) %>

如果您可以100%信任标记(我认为您可以在这种情况下),您可以使用raw绕过转义或html_safe将字符串标记为安全。这将导致输出所有标记。

<%= raw CodeRay.scan(..., :ruby).div(:css => :class) %>

<%= CodeRay.scan(..., :ruby).div(:css => :class).html_safe %>

另见http://guides.rubyonrails.org/active_support_core_extensions.html#output-safety