RoR3アプリでマルクを使用しています。ただし、問題は、h(text)Marukuを使用する前にこのメソッドを使用してデータベースからテキストをエスケープすると、エスケープ>する>ため、Marukuがこれをブロッククォートと見なさないことです。
しかし、それでも残りのテキストをエスケープしたいので、私の質問は、これをどのように機能させることができるかということです。
エスケープを無効にしたくないが、エスケープしたくない>
Rails 3は、デフォルトですべての文字列をエスケープします。これを回避したい場合は、「some_string.html_safe」を使用して安全としてマークするか、テンプレートで<%= raw some_string%>を使用する必要があります。
通過させたいHTMLタグを許可するようにサニタイズヘルパーを設定すると、次のようになります。
<%= sanitize(@maruku_content.to_html) %>
Sanitizeはコンテンツをスクラブし、目的のタグをそのままにして、出力をhtml_safeとしてマークします。このオプションについては、rails_xssプラグインのドキュメントをご覧ください。彼らが使用する例はテキスタイルです。
次のメソッドは、html_encoded 複数行文字列を受け取り、html エンティティ コードに変換されたすべての maruku blockquote 要素を > に戻します。
この実装の目的で、maruku blockquote 行は、オプションの空白で区切られた 1 つ以上の > シーケンスで始まる行として定義されます。
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>
"