Railsでタグをエスケープしつつ、改行を含む複数行のTextを表示したい
改行文字を<br>
タグに変換できれば良いのですが、
最初は次のように書きました。
<%= simple_format(text) %>
これで改行されるようになったのですが、
<b>text</b>
のようにタグを含むテキストを入力するとtext
が太字で表示されてしまいました。
そこで次のように書き換えました。
<%= sanitize(simple_format(text), :tags => %w(p br)) %>
これでtext
が太字ではなくなりましたが、まだ<b>``</b>
が表示されません。
そこで最終的に次のヘルパーを作って表示させました。
def br(str)
html_escape(str).gsub(/\r\n|\r|\n/, "<br />").html_safe
end
html_escape
で入力文字を全てエスケープし、改行を<br>
タグに変換し、変換した<br>
がエスケープされないようにしてます。
追記:
と書きましたが、@github0013@githubさんから次の方法で変換できることを教えてもらいました。ありがとうございます!
simple_format(h(text))