Rupanya, ini lebih sulit ditemukan daripada yang saya kira. Dan itu bahkan sangat sederhana ...
Apakah ada fungsi yang setara dengan htmlspecialchars PHP yang dibangun ke dalam Javascript? Saya tahu ini cukup mudah untuk diimplementasikan sendiri, tetapi menggunakan fungsi bawaan, jika tersedia, hanya lebih baik.
Bagi mereka yang tidak terbiasa dengan PHP, htmlspecialchars menerjemahkan hal-hal seperti <htmltag/>
ke<htmltag/>
Saya tahu itu escape()
dan encodeURI()
tidak bekerja dengan cara ini.
javascript
html
escaping
html-encode
Bart van Heukelom
sumber
sumber
Jawaban:
Ada masalah dengan kode solusi Anda - itu hanya akan luput dari kemunculan pertama setiap karakter khusus. Sebagai contoh:
Berikut adalah kode yang berfungsi dengan baik:
Memperbarui
Kode berikut akan menghasilkan hasil yang identik dengan di atas, tetapi kinerjanya lebih baik, terutama pada blok teks yang besar (terima kasih jbo5112 ).
sumber
Itu Pengodean HTML. Tidak ada fungsi javascript asli untuk melakukan itu, tetapi Anda dapat google dan mendapatkan beberapa yang dilakukan dengan baik.
Misalnya http://sanzon.wordpress.com/2008/05/01/neat-little-html-encoding-trick-in-javascript/
EDIT:
Ini yang saya uji:
Keluaran:
<htmltag/>
sumber
encodeURIComponent
dilakukan dan tidak sama sekali dengan apa yang diminta OP. Jadi bisakah Anda mengedit tolong? Sepertinya saya tidak bisa membatalkan -1 saya.div
elemen tunggal dan simpul teks. Membuat simpul teks dengan teks `<img src = bogus onerror = alert (1337)>` hanya akan membuat simpul teks, bukanimg
elemen.Layak dibaca: http://bigdingus.com/2007/12/29/html-escaping-in-javascript/
Catatan : Hanya jalankan ini sekali. Dan jangan jalankan pada string yang sudah dikodekan misalnya
&
menjadi&amp;
sumber
Dengan jQuery bisa seperti ini:
Dari pertanyaan terkait Melarikan string HTML dengan jQuery
Seperti yang disebutkan dalam komentar, kutipan ganda dan kutipan tunggal dibiarkan apa adanya untuk implementasi ini. Itu berarti solusi ini tidak boleh digunakan jika Anda perlu membuat atribut elemen sebagai string html mentah.
sumber
<!-- Caps rage begin -->
Jawaban ini harus memiliki skor NEGATIF karena TIDAK BAHKAN DATANG DEKAT DENGAN JAWABAN PERTANYAAN "HtmlSpecialChars equivalen".<!-- Caps rage end -->
itu-tidak-tidak-melarikan diri-mengutip-yesus-krist-dan-dewa-lainnya. OMG Anda membuat orang jquery.Berikut adalah fungsi untuk keluar dari HTML:
Dan untuk memecahkan kode:
sumber
Underscore.js menyediakan fungsi untuk ini:
http://underscorejs.org/#escape
Ini bukan fungsi Javascript bawaan, tetapi jika Anda sudah menggunakan Underscore itu adalah alternatif yang lebih baik daripada menulis fungsi Anda sendiri jika string Anda untuk mengonversi tidak terlalu besar.
sumber
Namun hal lain yang harus dilakukan adalah melupakan semua pemetaan karakter sekaligus dan alih-alih mengubah semua karakter yang tidak diinginkan ke masing-masing referensi karakter numeriknya, misalnya:
Perhatikan bahwa RegEx yang ditentukan hanya menangani karakter spesifik yang OP ingin hindari tetapi, tergantung pada konteks bahwa HTML yang lolos akan digunakan, karakter ini mungkin tidak cukup. Artikel Ryan Grove Ada lebih banyak hal untuk menghindari HTML daripada &, <,>, dan " adalah bacaan yang bagus untuk topik ini. Dan tergantung pada konteks Anda, RegEx berikut mungkin sangat diperlukan untuk menghindari injeksi XSS:
sumber
Sampel :
sumber
Kemungkinannya adalah Anda tidak membutuhkan fungsi seperti itu. Karena kode Anda sudah ada di browser *, Anda dapat mengakses DOM secara langsung alih-alih menghasilkan dan menyandikan HTML yang harus diterjemahkan kembali oleh peramban agar dapat digunakan.
Gunakan
innerText
properti untuk menyisipkan teks biasa ke DOM dengan aman dan jauh lebih cepat daripada menggunakan fungsi melarikan diri apa pun yang disajikan. Bahkan lebih cepat daripada menetapkan string preencoded statisinnerHTML
.Gunakan
classList
untuk mengedit kelas,dataset
untuk mengaturdata-
atribut dansetAttribute
untuk orang lain.Semua ini akan menangani pelarian untuk Anda. Lebih tepatnya, tidak ada pelolosan yang diperlukan dan tidak ada pengkodean yang dilakukan di bawah **, karena Anda bekerja di sekitar HTML, representasi tekstual dari DOM.
* Jawaban ini tidak ditujukan untuk pengguna JavaScript sisi-server (Node.js, dll. )
** Kecuali Anda secara eksplisit mengubahnya menjadi HTML aktual setelahnya. Misalnya dengan mengakses
innerHTML
- inilah yang terjadi ketika Anda menjalankan yang$('<div/>').text(value).html();
disarankan dalam jawaban lain. Jadi, jika tujuan akhir Anda adalah memasukkan beberapa data ke dalam dokumen, dengan melakukannya dengan cara ini Anda akan melakukan pekerjaan dua kali. Anda juga dapat melihat bahwa dalam HTML yang dihasilkan tidak semuanya dikodekan, hanya minimum yang diperlukan agar valid. Ini dilakukan tergantung konteks, itu sebabnya metode jQuery ini tidak menyandikan tanda kutip dan karenanya tidak boleh digunakan sebagai escaper tujuan umum. Pelarian kutipan diperlukan ketika Anda membuat HTML sebagai string dengan data yang tidak tepercaya atau berisi kutipan di tempat nilai atribut. Jika Anda menggunakan DOM API, Anda tidak perlu repot melarikan diri sama sekali.sumber
el.textContent = str; el.innerHTML = el.innerHTML.replace(/\n/g, '<br>')
), atau mengaturwhite-space
properti CSS kepre
ataupre-wrap
innerText
bukantextContent
. Meskipun sedikit lebih lambat dan memiliki beberapa perbedaan lain ketika membaca properti, itu lebih intuitif karena ia melakukan<br>
penggantian secara otomatis ketika menetapkan untuk itu.Untuk pengguna Node.JS (atau pengguna yang menggunakan runtime Jade di browser), Anda dapat menggunakan fungsi escape Jade.
Tidak masuk akal untuk menulisnya sendiri jika orang lain memeliharanya. :)
sumber
Saya sedikit menguraikan jawaban okw.
Anda dapat menggunakan fungsi DOM browser untuk itu.
Ini kembali
<escapeThis>&
Ini menggunakan fungsi standar
createElement
untuk membuat elemen yang tidak terlihat, kemudian menggunakan fungsitextContent
untuk mengatur string apa pun sebagai kontennya dan kemudianinnerHTML
untuk mendapatkan konten dalam representasi HTML-nya.sumber
sumber
Semoga ini memenangkan perlombaan karena kinerjanya dan yang paling penting bukan logika berantai menggunakan .replace ('&', '&'). Ganti ('<', '<') ...
sumber
Yang dibalik:
sumber
<
dan&gr;
dalam sebuah string.To write a greater than sign in HTML type &gt;
itu akan ditampilkan secara salah,>
bukan>
OWASP merekomendasikan bahwa "[e] kecuali untuk karakter alfanumerik, [Anda harus] keluar dari semua karakter dengan nilai ASCII kurang dari 256 dengan
&#xHH;
format (atau entitas bernama jika tersedia) untuk mencegah beralih dari atribut [an]."Jadi, inilah fungsi yang melakukan itu, dengan contoh penggunaan:
sumber
Solusi ini menggunakan kode numerik karakter, misalnya
<
diganti oleh<
.Meskipun kinerjanya sedikit lebih buruk daripada solusi menggunakan peta , ia memiliki keuntungan:
sumber