2

RoR3アプリでマルクを使用しています。ただし、問題は、h(text)Marukuを使用する前にこのメソッドを使用してデータベースからテキストをエスケープすると、エスケープ>する>ため、Marukuがこれをブロッククォートと見なさないことです。

しかし、それでも残りのテキストをエスケープしたいので、私の質問は、これをどのように機能させることができるかということです。

エスケープを無効にしたくないが、エスケープしたくない>

4

2 に答える 2

3

Rails 3は、デフォルトですべての文字列をエスケープします。これを回避したい場合は、「some_string.html_safe」を使用して安全としてマークするか、テンプレートで<%= raw some_string%>を使用する必要があります。

通過させたいHTMLタグを許可するようにサニタイズヘルパーを設定すると、次のようになります。

<%= sanitize(@maruku_content.to_html) %>

Sanitizeはコンテンツをスクラブし、目的のタグをそのままにして、出力をhtml_safeとしてマークします。このオプションについては、rails_xssプラグインのドキュメントをご覧ください。彼らが使用する例はテキスタイルです。

于 2010-06-06T23:13:32.540 に答える
0

次のメソッドは、html_encoded 複数行文字列を受け取り、html エンティティ コードに変換されたすべての maruku blockquote 要素を > に戻します。

この実装の目的で、maruku blockquote 行は、オプションの空白で区切られた 1 つ以上の > シーケンスで始まる行として定義されます。

def maruku_escape(text)
  text.gsub(/^([\s]*\&gt;)+/) {|match| match.gsub(/\&gt;/, '>')}
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;
"
于 2010-06-06T12:34:39.323 に答える