Apakah ada cara Railsy untuk mengubah \ n menjadi <br>?
Saat ini, saya melakukannya seperti ini:
mystring.gsub(/\n/, '<br>')
Apakah ada cara Railsy untuk mengubah \ n menjadi <br>?
Saat ini, saya melakukannya seperti ini:
mystring.gsub(/\n/, '<br>')
Jawaban:
Ya, rel memiliki simple_formatyang melakukan apa yang Anda cari, dan sedikit lebih baik karena juga menambahkan tag paragraf. Lihat
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Contoh:
simple_format(mystring)
Perhatikan bahwa simple_formatmemungkinkan tag HTML dasar, tetapi juga meneruskan teks sanitizeyang akan menghapus semua skrip, jadi harus aman untuk masukan pengguna.
simple_formatsecara otomatis membungkus teks yang disediakan dalam <p>tag, dan fungsi ini tidak dapat dihindari.
javascript:alert(\no!\)diberikan dalam referensi. Mungkin ada variasi yang tak ada habisnya dan variasi masa depan untuk digunakan oleh peretas jahat.
wrapper_tagopsi yang memungkinkan untuk mengubah <p>tag untuk hal lain
Anda dapat membuatnya lebih umum dengan melakukan:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Dengan cara ini Anda akan mencakup DOS, * NIX, Mac dan akhiran baris tidak valid yang tidak disengaja.
simple_formatAnda dapat memisahkan regex tersebut, gunakan mapuntuk membungkus string dalam ptag pembuka dan penutup , lalu gabungkan. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.joinharus melakukannya, meskipun saya tidak mengujinya.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>. Dan itu bekerja seperti pesona boohoo!
mystringbisa berisi HTML sembarangan.
Anda harus berhati-hati dengan ini ketika Anda berurusan dengan input pengguna.
simple_formatmenyisipkan <br>tag tetapi itu akan memungkinkan tag html lainnya !
Saat menggunakan simple_format, <b>Hello</b>akan ditampilkan sebagai " Halo ", Anda mungkin tidak menginginkan ini.
Sebagai gantinya Anda dapat menggunakan <%= h(c.text).gsub("\n", "<br>").html_safe %>
h()akan menyandikan html terlebih dahulu, gsubmenggantikan jeda baris dan html_safememungkinkan <br>tag untuk ditampilkan.
Ini akan menampilkan dengan tepat apa yang dimasukkan pengguna. Ini juga memungkinkan untuk mendiskusikan html di misalnya komentar.
simple_formatmengizinkan tag HTML dasar, penting untuk diperhatikan bahwa tag ini juga melewati teks sanitize, yang menghapus apa pun yang berpotensi berbahaya. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Cukup gunakan
white-space: pre-line;
di css dan teks Anda akan dibungkus saat jeda baris.
Anda juga dapat mempertimbangkan apa yang Anda coba lakukan - jika Anda memformat teks dengan baik yang telah dimasukkan orang, Anda dapat mempertimbangkan filter seperti Markdown untuk memungkinkan pengguna Anda memformat teks mereka tanpa membuka kaleng worm yang merupakan HTML. Anda tahu, seperti yang ada di Stack Overflow.
Nggak. Apa yang Anda miliki di sana adalah alternatif yang umum digunakan. Definisi yang digunakan kebanyakan orang adalah:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Dinamakan demikian karena meniru fungsionalitas fungsi PHP dengan nama yang sama .
mystring.gsub(/\r\n|\r|\n/, '\n')
bekerja untuk saya
Anda dapat melakukannya simple_format(h(text))- ini hakan memastikan HTML apa pun tidak ditampilkan.
Seperti yang disebutkan dalam jawaban lain, ini akan melakukan lebih dari yang Anda minta. Ini membungkus semuanya <p>, dan menambahkan lebih banyak paragraf jika Anda memiliki baris baru ganda di mana saja.