PHP歴17年7ヶ月
Ruby歴1ヶ月
たまたま舞い込んで来た初となるRuby(RubyOnRails)案件です。
複数行テキストの出力で狙った通りの表示が出来ず困っています。
●テキスト例
text = "テスト\n\nテスト"
上記テキスト値があったとします。
(現実的にはフォームの<textarea>から入力した複数行テキストをDBに保存したものを取り出した値)
●やりたいこと
上記テキスト例をただ単純に改行を反映させて、
テスト
テスト
・・・というように改行文字を2つ挟んでますので行間を空けて出力したいのですがこれが出来ません。
●PHPの場合
安全に出力するための措置を行った上で「nl2br()」という関数を使用するのが一般的ではないかと思います。(この関数はPHPを初めてから結構早めに覚えるものです)
●Ruby(RubyOnRails)の場合
調べた感じですと、まず改行を反映させるには「simple_format」を使用することになるようですが、
確かに改行が反映されますが狙ったとおりにはなりません。
(出力されるHTML)・・・FWでありがちですが、自動的に<p>タグが挿入されるがもう一つの改行が無視される
<p>テスト</p> <p>テスト</p>(表示される状況)・・・行間が詰まってしまう
テスト
テスト
※テラテイルでの表示で当方の意図しない形でレイアウトが崩れていたらすみません。
●試したこと
https://improve-future.com/rails-realize-nl2br.html
ネット上の情報を検索して上記のような記事(2015年情報)がでてきましたが、検索してこういった記事が出てくるということは簡単にはいかないんでしょうかね。
要は、
・改行文字を<br>に置き換える
・このままだと<br>タグが実体参照に変換される(<br>)ためタグをそのままブラウザーで表示
・このため「html_safe」を使用
・これではさすがにマズいのでさらにsinitizeを使用
ということですが、これしか方法がないのでしょうか?
def nl2br(str)
return sanitize(str).gsub("\n", '<br>').html_safe
end
※ユーザがフォームからの入力した内容って当然わかりやすいように行間を入れたり普通にするのですが、ちょっと調べた感じですと、こんな単純な事が難しいんでしょうかね?
やはりRubyの情報量って圧倒的に少ないです。
しかも、出てきても内容が怪しい(素人の仕業)か10年以上前の情報とかザラに出てきます。
Rubyの開発者さんってこんな状況でどんなふうに開発されてるんでしょうか。
こんな単純なことなのですがどうしていいか本気で困ってます。
ちなみに上記のRuby版nl2brでは例えば<h1>タグなどはHTMLとして解釈されますのでここから更にCSS等も含めて何かしら処置が必要です。
下記の記事もチェックしましたがちょっとイメージが違いました
https://marketing-web.hatenablog.com/entry/simple_format_without_p
※当方の調査不足、認識違いがあったら恐れ入ります・
よろしくお願いします
■20211226追記
回答得られず・・(外野からヤジが1件)
やっぱRubyって終わってるんですかね(笑)
閲覧だけ頂いた方含め、ご覧いただきありがとうございました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/26 11:06
2021/12/26 13:48
2021/12/26 19:11