我在我的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 =  "&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;
"

09-07 22:01