我用我的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