概要
simple_format
は、テキストをシンプルなHTML形式に変換するRailsのヘルパーメソッドです。主に、改行をHTMLタグに変換する用途で使用されます。
以下の条件で文字列が加工されます。
- 文字列全体を
<p>
タグで括る - 改行は
<br />
に変換 - 連続した改行は新たな
<p>
タグに変換
具体例
<%= simple_format("Hello\nWorld") %>
出力結果
<p>Hello<br />
World</p>
改行コードが<br>
に変換され、文字列全体が<p>
で囲まれました。
注意点
HTMLタグを含むテキストに適用する場合、タグがエスケープされずにそのまま表示されます。
具体例
<%= simple_format("<h1>Hello\nWorld</h1>") %>
出力結果
<h1>Hello<br />
World</h1>
<h1>
タグはエスケープされずにそのまま出力されています。
エスケープされないことにより、意図しないタグが表示されたりXSS攻撃のリスクがあります。
オプション
h
h
メソッドは、HTMLをエスケープして安全に表示するために使用されます。
このメソッドを使用することで、テキスト内のHTMLタグをそのまま文字列として出力することが可能です。
具体例
<%= simple_format(h("<h1>Hello\nWorld</h1>")) %>
出力結果
<p><h1>Hello<br />
World</h1></p>
<h1>
タグがエスケープされ、ブラウザには文字列として表示されます。
sanitize
sanitize
は、不要なHTMLタグを除去し、必要なタグだけを許可するために使用されます。
これにより、HTMLを部分的に許可しつつ安全性を確保できます。
具体例
<%= simple_format(sanitize("<h1>Hello\nWorld</h1><script>alert('XSS!攻撃!');</script>")) %>
出力結果
<p><h1>Hello<br />
World</h1></p>
<script>
タグは除去され、<h1>
タグのみが残ります。
hメソッドとsanitizeオプションの違い
-
hメソッド
すべてのHTMLタグをエスケープして無効化します。ユーザー入力を完全に文字列として表示したい場合に使用します。 -
sanitizeメソッド
不要なHTMLタグを除去し、必要なタグのみを残します。一部のHTML装飾(例: 太字や斜体)を利用したい場合に適しています。
これらのオプションを活用することで、simple_format
の出力を安全かつ正確に制御できます。
参考