16

モデルに「about」というテキスト フィールドがあり、ショー ページに表示しようとしていますが、改行が正しく表示されません。

いろいろ試してみましたが、最終的にたどり着いたコードは次のとおりです。

<%= (h @template.about).gsub("\n", "<br />") %>

残念ながら、Rails は目的の HTML をエスケープして、これらの改行を次のように出力しているようです。

Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? &lt;br /&gt;

テキスト フィールドの "\n" 改行を実際の改行 HTML に正しく変換するにはどうすればよいですか? 私はすでにシンプルなフォーマットも試しましたが、役に立ちませんでした...

私は Rails 3 を使用しており、'about' の最初の数行は次のとおりです。

みんな、魚をありがとう!欲しかったわけじゃないけど… ええと… ありがとう?
「それは私が判断します」と彼は言った!
そして今、もっと役に立たないコピーを作って、アマンダが見つけた変なつぼみを分離できるようにします。
待って!私は「奇妙なバグ...」を意味しました

4

2 に答える 2

37

試す

<%= simple_format @template.about %>

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format

わたしにはできる :-\

1.9.3p194 :017 > str = "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? 
1.9.3p194 :018"> \"I'll be the judge of that,\" he said! 
1.9.3p194 :019"> And now, more useless copy so I can isolate that weird bud that Amanda found. 
1.9.3p194 :020"> Wait! I meant 'weird bug..."
 #=> "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? \n\"I'll be the judge of that,\" he said! \nAnd now, more useless copy so I can isolate that weird bud that Amanda found. \nWait! I meant 'weird bug..."


1.9.3p194 :021 > simple_format str
 #=> "<p>Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? \n<br />\"I'll be the judge of that,\" he said! \n<br />And now, more useless copy so I can isolate that weird bud that Amanda found. \n<br />Wait! I meant 'weird bug...</p>"

または使用してgsub

1.9.3p194 :022 > str.gsub("\n", "<br />") 
 #=> "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? <br />\"I'll be the judge of that,\" he said! <br />And now, more useless copy so I can isolate that weird bud that Amanda found. <br />Wait! I meant 'weird bug..." 
于 2012-08-22T17:47:39.160 に答える
3
<%= (h @template.about).gsub("\n", "<br />").html_safe %>

hヘルパーはテキストをエスケープするため、XSS 攻撃にさらされることはありません。そのテキストがエスケープgsubされると、新しい文字列を と宣言することができますhtml_safe

html_safeis not escapingです。文字列をエスケープしてはならないという宣言です。ただし、ユーザー入力が含まれていないことが確実でない限り、元の文字列をエスケープする必要があります。

于 2015-01-24T19:26:06.690 に答える