html_safeメソッド

[html_safe]メソッドとは?

Railsでは、<%=%>を使ってHTMLの出力をする場合<%=%>の中に[<],[>],[&],["]といったHTMLにおいての特殊な文字を入れると、HTMLとしての意味で表示されてしまうため、Railsでは自動でこういった文字をエスケープしてブラウザ上でHTMLとしての解釈ではなく、文字としての記号として表示するようにしている。
しかし、場合によってはエスケープせずに<%=%>の中の[<],[>],[&],["]といった記号をHTMLとしての意味として使いたい場合がある。
こういった場合は、<%=%>の中で自動でエスケープされてしまうのを止めることでHTMLとして[<],[>],[&],["]といった記号を使う事ができる。
このような自動でエスケープされてしまうのを止めるメソッドが、[html_safe]メソッドです。

実際に<%=%>の中での自動エスケープと[html_safe]メソッドを使って自動エスケープを止める検証が以下のようになります。

# slim形式での記述

h3.box-title = '<p>文章</p>'

# 上記の記載は、ブラウザの検証ツールでは以下のように表示されて、pタグなどがエスケープされているのが分かる
<h3 class="box-title">&lt;p&gt;文章&lt;/p&gt;</h3>

上記は、<h3 class="box-title"></h3>の中にrubyコードが記述されているがpタグがエスケープされてpタグのまま記述されている

Image from Gyazo

# slim形式での記述

h3.box-title = '<p>文章</p>'.html_safe

# 上記の記載は、ブラウザの検証ツールで以下のように表示されて、<p>タグがエスケープされず表示されてブラウザがHTMLタグとしての意味で表示しているのが分かる
<h3 class="box-title"><p>文章</p></h3>
  <p>文章</p>
</h3>

上記は、<h3 class="box-title"></h3>の中にrubyコードが記述されてその中にある

タグがエスケープされずブラウザでHTMLの

タグの意味として表示されている

Image from Gyazo

参考記事

HTML特殊文字のエスケープ - Ruby on Rails入門