Railsでは、ERB (eRuby (テキストファイルにRubyスクリプトを埋込む書式の仕様) をRubyで実装したもの) を用いてHTML内にRubyスクリプトを埋込むことができます。
条件分岐が埋込めます。
app/views/main/index.html.erb
<% var=128 %>
<% if var < 256 %>
var is less than 256.
<% elsif var > 256 %>
var is greater than 256.
<% else %>
var is equal to 256.
<% end %>
app/views/main/index.html.erb
<% (0..10).each do |i| %>
Count: <%= i %><br />
<% end %>
app/controllers/main_controller.rb
class MainController < ApplicationController
def index
@var = 128
end
end
app/views/main/index.html.erb
<%= @var %>
<%= %> で囲むと'<'や'>'などがすべてエスケープされます。<%== %>で囲むとエスケープされずにそのまま出力されます。
app/views/main/index.html.erb
<%= "<script>alert()</script>" %>
出力されるHTML
<script>alert()</script>
'<'や'>'をすべてエスケープするのではなく、悪意ある可能性のあるコードが無効化されるように必要最低限のものをエスケープするためには、sanitizeメソッドを使用します。
app/views/main/index.html.erb
<%== sanitize("This is safe. <script>alert()</script><a href="">link<a>") %>
出力されるHTML
This is safe. <a href="">link<a>
url_encodeメソッド (またはそれを短縮したuメソッド) を使用します。ファイル保存時の文字コードでURLエンコーディングされることに注意しましょう。
app/views/main/index.html.erb
<%= u("日本語") %>
<%= url_encode("あいうえお") %>