2010-05-27 56 views
2

我用我的RoR3应用Maruku。 但问题是,当我使用h(text)方法来逃避从我的数据库中的文本之前,我使用Maruku它逃脱>>所以Maruku不会看到这是一个blockquote。铁路3逃跑maruku

但我仍然想逃避文本的其余部分,所以我的问题是我如何使这项工作?

我不想禁用逃跑,但我不希望它逃脱>

回答

0

下面的方法将html_encoded多串并替换已转换为HTML实体代码回所有maruku块引用元素>

对于此实现的目的,maruku blockquote行被定义为以一个或多个以可选空白分隔的>序列开始的行。

def maruku_escape(text) 
    text.gsub(/^([\s]*\>)+/) {|match| match.gsub(/\>/, '>')} 
end 

以下测试字符串被用来

test_text = "<b>A bold tag</b> 
<span>Some text in a span</span> 

Some Markdown 
> Blockquote 1 
    > > nested blockquote 1 
    > > nested blockquote 2 
    >> nested blockquote 3 with no spaces 


Some plain text with an invalid blockquote > Some blockquote text 
<i>The end in italics<i>" 

并使用此如下maruku_text = maruku_escape(ERB::Util.html_escape(test_text))

给出以下结果

result = "&lt;b&gt;A bold tag&lt;/b&gt; 
&lt;span&gt;Some text in a span&lt;/span&gt; 

Some Markdown 
> Blockquote 1 
    > > nested blockquote 1 
    > > nested blockquote 2 
    >> nested blockquote 3 with no spaces 


Some plain text with an invalid blockquote &gt; Some blockquote text 
&lt;i&gt;The end in italics&lt;i&gt; 
" 
+0

有人比我更好的正则表达式可能能够找出一个不会调用gsub两次的正则表达式。 – 2010-06-06 12:40:16

+2

请注意,Rails 3会自动为您调用html_escape。 – 2010-06-06 12:40:50

3

导轨3逸出的所有字符串by default。如果您想避免这种情况,您需要在模板中使用“some_string.html_safe”或使用<%= raw some_string%>将它们标记为安全。

如果你设置了sanitize helper,让你想通过HTML标签,你可以做这样的事情:

<%= sanitize(@maruku_content.to_html) %> 

消毒将擦洗你的内容,标出输出作为html_safe而留下所需的标签完整。该选项在rails_xss插件文档here中讨论。他们使用的例子是纺织品。

+0

我不认为sanitize会工作,虽然maruku是标记,但不是html。尤其是它使用>来表示块引号 – 2010-06-08 21:48:38

+0

您是使用Maruku输出HTML还是用于LaTex?如果它是用于HTML的,那么上面的例子就是这样做的,因为它正在逃避Maruku的HTML输出,而不是存储的Markdown。 Markdown - > Maruku的内部表示 - > HTML - >清理 – Awgy 2010-06-09 00:44:05

+0

即使这样做是相反的,sanitize也不会修改bare>。只有当它是像