[Rails5]simple_format, h, html_safeを色々試してみた

simple_format(h(test_text)).html_safe と書くのが一番と教えてもらったことがあるが、どうゆう動きなのかわからなかったので、それぞれのパターンで試してみた。

test_text = テキストエリアによって入力された文字列

test_text = 
'<a href='http://example.com'>web site</a>
<script type='text/javascript'>
$('#test').on('click',function(){ alert('out!')});
</script>'

<%= test_text %>

<a href='http://example.com'>web site</a> <script type='text/javascript'> $('#test').on('click',function(){ alert('out!')}); </script>

<%= h(test_text) %>

<a href='http://example.com'>web site</a> <script type='text/javascript'> $('#test').on('click',function(){ alert('out!')}); </script>

<%= simple_format(test_text) %>

web site

$('#test').on('click',function(){ alert('out!')});

<%= test_text.html_safe %>

web site

scriptも埋め込まれた。これはやばい。

<%= simple_format(test_text).html_safe %>

web site

$('#show-profile').on('click',function(){ alert('out!')});

<%= h(test_text).html_safe %>

<a href='http://example.com'>web site</a> <script type='text/javascript'> $('#test').on('click',function(){ alert('out!')}); </script>

<%= simple_format(h(test_text)).html_safe %>

<a href='http://example.com'>web site</a>
<script type='text/javascript'>
$('#test').on('click',function(){ alert('out!')});
</script>

<%= %>でそもそもエスケープされている。

URLが入力されたら自動でaタグを付与してリンクとして表示したい場合は、
下記を参考にした上で、
text_url_to_link(simple_format(h(test_text))).html_safe
と書くと良い。

<%= text_url_to_link(simple_format(h(test_text))).html_safe %>

<a href='http://example.com'>web site</a>
<script type='text/javascript'>
$('#test').on('click',function(){ alert('out!')});
</script>

参考
https://qiita.com/satoken0417/items/df4098a122d05d69a3e6

コメント

  1. じゅん より:

    はじめまして。
    質問があります!

    上記の書き方をした場合はどれに当てはまりますか?

    • Yuruli(管理者) より:

      初めまして!

      ご質問ありがとうございます。
      上記の書き方とはどちらに該当しますでしょうか?