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>
コメントを残す