私は持っています
@str = "<b>Hi</b>"
そして私のエルブビューで:
<%= @str %>
ページに表示されるものは、<b>Hi</b>
本当に欲しいものが こんにちは。文字列をHTMLマークアップとして「解釈」するRubyの方法は何ですか?
編集:の場合
@str = "<span class=\"classname\">hello</span>"
私の意見では
<%raw @str %>
HTMLソースコードは<span class=\"classname\">hello</span
>で、ここで本当に欲しいのは<span class="classname">hello</span>
です(二重引用符をエスケープするバックスラッシュなし)。これらの二重引用符を「エスケープ」する最良の方法は何ですか?
セキュリティ上の理由から、html_safe
の代わりに sanitize
を使用することをお勧めします。 リンク
セキュリティ対策として、Railsに悪意のあるコードが埋め込まれている可能性があるため、文字列をエスケープしています。しかし、あなたの文字列がhtml_safe
であることをRailsに伝えると、それはそのまま渡されます。
@str = "<b>Hi</b>".html_safe
<%= @str %>
OR
@str = "<b>Hi</b>"
<%= @str.html_safe %>
raw
を使用しても問題ありませんが、文字列を文字列に変換してからhtml_safeを呼び出すだけです。文字列があることがわかったら、html_safeを直接呼び出すことを好みます。これは、不要なステップをスキップし、何が起こっているかを明確にするためです。文字列エスケープとXSS保護の詳細は this Asciicast にあります。
悪意のあるコードを削除するsimple_format(@str)
を使用することもできます。詳細はこちら: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
ビジネスロジックとコンテンツを混在させています。代わりに、ページにデータを送信し、JQueryなどを使用して、データを必要な場所に配置することをお勧めします。
これには、すべてのHTMLが属するHTMLページにすべてのHTMLを保持するという利点があります。そのため、Webデザイナーは、サーバー側のコードを流さなくても、後でHTMLを変更できます。
または、JavaScriptを使用したくない場合は、これを試すことができます。
@str = "Hi"
<b><%= @str ></b>
少なくともこの方法では、HTMLはそれが属するHTMLページにあります。
または、CGI.unescapeHTMLメソッドを試すことができます。
CGI.unescapeHTML "<p>This is a Paragraph.</p>"
=> "<p>This is a Paragraph.</p>"
あなたが翻訳し、人のくだらないコード化されたファイルからあなたの欲しいコードを選ぶので、あなたは正規表現と組み合わせてcontent_tagを使うことができます。
APIドキュメントから盗み、この翻訳されたコードをcontent_tag
のように補間できます:
<%= content_tag translated_tag_type.to_sym, :class => "#{translated_class}" do -%>
<%= translated_text %>
<% end -%>
# => <div class="strong">Hello world!</div>
あなたのコードを知らないので、この種の考え方はあなたの翻訳されたコードがあまりにも準拠していることを確認します。
@str = "<span class=\"classname\">hello</span>"
私の意見では
<%raw @str %>
HTMLソースコードは<span class=\"classname\">hello</span>
で、ここで本当に欲しいのは<span class="classname">hello</span>
です(二重引用符をエスケープするバックスラッシュなし)。これらの二重引用符を「エスケープ」する最良の方法は何ですか?
解決策:バックスラッシュでエスケープしないように、単一引用符の内側に二重引用符を使用します(または二重の内側に単一引用符を使用します)。
@str = '<span class="classname">hello</span>'
<%raw @str %>
Html_safeバージョンはRails 4 ...
<%= "<center style=\"color: green; font-size: 1.1em\" > Administrators only </center>".html_safe if current_user.admin? %
>