Rails では、HTML コンテンツを含む変数がある場合、それをビュー ファイルにエンコードせずに出力するにはどうすればよいですか?
たとえば、このコードは次のとおりです。
<% my_variable = "<b>Some Bolded Text</b>" %>
<%= my_variable %>
出力:
<b>Some Bolded Text</b>
Rails では、HTML コンテンツを含む変数がある場合、それをビュー ファイルにエンコードせずに出力するにはどうすればよいですか?
たとえば、このコードは次のとおりです。
<% my_variable = "<b>Some Bolded Text</b>" %>
<%= my_variable %>
出力:
<b>Some Bolded Text</b>
Rails 3 ベータ版を使用していますか? Rails 2 はデフォルトで出力を HTML エスケープしません。通常はh
ヘルパーを使用する必要があります。Nate の投稿を参照してください。Rails 3 を使用している場合は、raw
ヘルパーを使用するか、文字列を html セーフとして設定する必要があります。例
<% my_variable = "<b>Some Bolded Text</b>" %>
<%= raw my_variable %>
または
<% my_variable = "<b>Some Bolded Text</b>".html_safe %>
<%= my_variable %>
Rails のバージョンを確認し、ご連絡ください。
ActionView::Helpers::TextHelperは、タグをエスケープするだけでなく、タグを完全に削除するメソッド strip_tags を提供します。
ソース[参照]:
def strip_tags(html)
return html if html.blank?
if html.index("<")
text = ""
tokenizer = HTML::Tokenizer.new(html)
while token = tokenizer.next
node = HTML::Node.parse(nil, 0, 0, token, false)
# result is only the content of any Text nodes
text << node.to_s if node.class == HTML::Text
end
# strip any comments, and if they have a newline at the end (ie. line with
# only a comment) strip that too
text.gsub(/<!--(.*?)-->[\n]?/m, "")
else
html # already plain text
end
end
<%= strip_tags(my_variable) %>