saya sudah
@str = "<b>Hi</b>"
dan dalam tampilan erb saya:
<%= @str %>
Apa yang akan ditampilkan pada halaman adalah: <b>Hi</b>
ketika apa yang saya inginkan adalah Hai . Apa cara ruby untuk "menafsirkan" string sebagai markup HTML?
Edit : kasus di mana
@str = "<span class=\"classname\">hello</span>"
Jika menurut saya saya lakukan
<%raw @str %>
Kode sumber HTML adalah <span class=\"classname\">hello</span
> tempat yang saya inginkan <span class="classname">hello</span>
(tanpa backslash yang lolos dari tanda kutip ganda). Apa cara terbaik untuk "menghapus" tanda kutip ganda itu?
%Q["quotation marks"] => "\"quotation marks\""
Sumber: en.wikibooks.org/wiki/Ruby_Programming/Syntax/… Tidak tahu apakah itu membantu.Jawaban:
MEMPERBARUI
Untuk alasan keamanan, disarankan untuk menggunakan
sanitize
bukanhtml_safe
. TautanApa yang terjadi adalah bahwa, sebagai langkah keamanan, Rails keluar dari string Anda untuk Anda karena mungkin ada kode jahat yang tertanam di dalamnya. Tetapi jika Anda memberi tahu Rails bahwa string Anda adalah
html_safe
, itu akan melewatinya.ATAU
Menggunakan
raw
berfungsi dengan baik, tetapi semua yang dilakukannya adalah mengubah string ke string, dan kemudian memanggil html_safe. Ketika saya tahu saya memiliki string, saya lebih suka memanggil html_safe secara langsung, karena melewatkan langkah yang tidak perlu dan membuatnya lebih jelas apa yang terjadi. Rincian tentang pelarian string dan perlindungan XSS ada di Asciicast ini .sumber
raw
. Sangat senang mengetahui hal ini!Gunakan mentah :
Tetapi seperti yang dikatakan @ jmort253 dengan benar, pertimbangkan di mana letak HTML yang sebenarnya.
sumber
Jika Anda
rails
menggunakan Erubis - cara paling keren untuk melakukannya adalahPerhatikan tanda sama dengan dobel. Lihat pertanyaan terkait pada SO untuk info lebih lanjut.
sumber
Anda juga dapat menggunakan
simple_format(@str)
yang menghapus kode berbahaya. Baca lebih lanjut di sini: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_formatsumber
Anda mencampur logika bisnis Anda dengan konten Anda. Sebagai gantinya, saya akan merekomendasikan mengirim data ke halaman Anda dan kemudian menggunakan sesuatu seperti JQuery untuk menempatkan data ke tempat yang Anda butuhkan.
Ini memiliki keuntungan menjaga semua HTML Anda di halaman HTML di tempatnya sehingga desainer web Anda dapat memodifikasi HTML nanti tanpa harus menuangkan melalui kode sisi server.
Atau jika Anda tidak ingin menggunakan JavaScript, Anda dapat mencoba ini:
Setidaknya dengan cara ini HTML Anda ada di halaman HTML tempatnya.
sumber
Atau Anda dapat mencoba metode CGI.unescapeHTML .
sumber
karena Anda menerjemahkan, dan memilih kode yang Anda inginkan dari file kode jelek seseorang, dapatkah Anda menggunakan content_tag, dalam kombo dengan regex Anda.
Mencuri dari api docs, Anda dapat menginterpolasi kode yang diterjemahkan ini menjadi
content_tag
seperti:Tidak mengetahui kode Anda, pemikiran semacam ini akan memastikan kode terjemahan Anda terlalu sesuai.
sumber
Solusi: gunakan tanda kutip ganda di dalam tanda kutip tunggal (atau selembar tunggal dalam ganda) untuk menghindari melarikan diri dengan backslash.
sumber
Versi html_safe berfungsi dengan baik di Rails 4 ...
sumber