我在我的Ror3应用程序中使用Maruku。
但问题是,当我在使用maruku之前使用h(text)
方法从数据库转义文本时,它会转义>
到>
,因此maruku不会将其视为一个blockquote。
但我还是想逃避剩下的课文,所以我的问题是,我如何才能使这项工作?
我不想禁用转义,但我不想它转义>
最佳答案
以下方法接受HTML编码的多行字符串,并替换所有已转换为HTML实体代码的Maruku blockquote元素,返回到>
在这个实现中,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>
"