我用我的RoR3应用Maruku。 但问题是,当我使用h(text)
方法来逃避从我的数据库中的文本之前,我使用Maruku它逃脱>
到>
所以Maruku不会看到这是一个blockquote。铁路3逃跑maruku
但我仍然想逃避文本的其余部分,所以我的问题是我如何使这项工作?
我不想禁用逃跑,但我不希望它逃脱>
我用我的RoR3应用Maruku。 但问题是,当我使用h(text)
方法来逃避从我的数据库中的文本之前,我使用Maruku它逃脱>
到>
所以Maruku不会看到这是一个blockquote。铁路3逃跑maruku
但我仍然想逃避文本的其余部分,所以我的问题是我如何使这项工作?
我不想禁用逃跑,但我不希望它逃脱>
下面的方法将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 = "<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>
"
导轨3逸出的所有字符串by default。如果您想避免这种情况,您需要在模板中使用“some_string.html_safe”或使用<%= raw some_string%>将它们标记为安全。
如果你设置了sanitize helper,让你想通过HTML标签,你可以做这样的事情:
<%= sanitize(@maruku_content.to_html) %>
消毒将擦洗你的内容,标出输出作为html_safe而留下所需的标签完整。该选项在rails_xss插件文档here中讨论。他们使用的例子是纺织品。
我不认为sanitize会工作,虽然maruku是标记,但不是html。尤其是它使用>来表示块引号 – 2010-06-08 21:48:38
您是使用Maruku输出HTML还是用于LaTex?如果它是用于HTML的,那么上面的例子就是这样做的,因为它正在逃避Maruku的HTML输出,而不是存储的Markdown。 Markdown - > Maruku的内部表示 - > HTML - >清理 – Awgy 2010-06-09 00:44:05
即使这样做是相反的,sanitize也不会修改bare>。只有当它是像
有人比我更好的正则表达式可能能够找出一个不会调用gsub两次的正则表达式。 – 2010-06-06 12:40:16
请注意,Rails 3会自动为您调用html_escape。 – 2010-06-06 12:40:50