私は持っている
@str = "<b>Hi</b>"
そして私のerbの見解では:
<%= @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>
(二重引用符をエスケープしていたバックスラッシュなし)。これらの二重引用符を「エスケープ解除」する最善の方法は何ですか?
ベストアンサー1
アップデート
セキュリティ上の理由から、sanitize
の代わりにhtml_safe
。
<%= sanitize @str %>
何が起こっているかというと、セキュリティ対策として、Rails は文字列に悪意のあるコードが埋め込まれている可能性があるため、文字列をエスケープしています。しかし、Rails に文字列が であると伝えるとhtml_safe
、Rails はそれをそのまま通過させます。
@str = "<b>Hi</b>".html_safe
<%= @str %>
または
@str = "<b>Hi</b>"
<%= @str.html_safe %>
を使用するraw
とうまく動作しますが、文字列を文字列に変換して を呼び出すだけですhtml_safe
。文字列であることがわかっている場合は、不要な手順を省略して何が起こっているかを明確にするため、直接 を呼び出すことを好みます。html_safe
文字列エスケープとXSS保護の詳細については、このアスキースト。