Saya ingin menampilkan teks ke HTML dengan fungsi javascript. Bagaimana saya bisa menghindari karakter khusus html di JS? Apakah ada API?
javascript
html
fernando123
sumber
sumber
Jawaban:
sumber
replace()
panggilan tidak perlu. String single-karakter lama yang biasa juga bisa digunakan.sumber
Anda dapat menggunakan fungsi jQuery
.text()
.Sebagai contoh:
http://jsfiddle.net/9H6Ch/
Dari dokumentasi jQuery tentang
.text()
fungsi:Versi sebelumnya dari Dokumentasi jQuery mengatakannya seperti ini ( penekanan ditambahkan ):
sumber
const str = "foo<>'\"&";
$('<div>').text(str).html()
yieldsfoo<>'"&
Saya rasa saya menemukan cara yang tepat untuk melakukannya ...
sumber
document.createTextNode("<script>alert('Attack!')</script>").textContent
Menggunakan lodash
Kode sumber
sumber
Sejauh ini, ini adalah cara tercepat yang pernah saya lakukan. Plus, itu melakukan semuanya tanpa menambahkan, menghapus, atau mengubah elemen pada halaman.
sumber
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
akan menghasilkan HTML yang tidak valid!Sangat menarik untuk menemukan solusi yang lebih baik:
Saya tidak menguraikan
>
karena tidak merusak kode XML / HTML dalam hasilnya.Berikut adalah tolok ukurnya: http://jsperf.com/regexpairs Juga, saya membuat
escape
fungsi universal : http://jsperf.com/regexpairs2sumber
Cara paling ringkas dan performan untuk menampilkan teks yang tidak disandi adalah dengan menggunakan
textContent
properti.Lebih cepat daripada menggunakan
innerHTML
. Dan itu tanpa memperhitungkan keluar biaya overhead.sumber
</
terpenuhi.DOM Elements mendukung konversi teks ke HTML dengan menetapkan ke innerText . innerText bukan fungsi tetapi menugaskannya berfungsi seolah-olah teks itu lolos.
sumber
<br>
elemen menggantikan baris baru, yang dapat merusak elemen tertentu, seperti gaya atau skrip. TidakcreateTextNode
rentan terhadap masalah ini.innerText
memiliki beberapa masalah warisan / spesifikasi. Lebih baik digunakantextContent
.Anda dapat menyandikan setiap karakter di string Anda:
Atau hanya menargetkan karakter utama yang perlu dikhawatirkan (&, inebreaks, <,>, "dan ') seperti:
sumber
Satu kalimat (untuk ES6 +):
Untuk versi yang lebih lama:
sumber
Datang di masalah ini saat membangun struktur DOM. Pertanyaan ini membantu saya menyelesaikannya. Saya ingin menggunakan chevron ganda sebagai pemisah jalur, tetapi menambahkan simpul teks baru secara langsung menghasilkan kode karakter yang lolos, bukan karakter itu sendiri:
sumber
Jika Anda sudah menggunakan modul di aplikasi Anda, Anda bisa menggunakan modul escape-html .
sumber
Coba ini, menggunakan
prototype.js
perpustakaan:Coba demo
sumber
Saya datang dengan solusi ini.
Mari kita asumsikan bahwa kita ingin menambahkan beberapa html ke elemen dengan data yang tidak aman dari pengguna atau database.
Tidak aman terhadap serangan XSS. Sekarang tambahkan ini.
Begitulah
Bagi saya ini jauh lebih mudah daripada menggunakan
.replace()
dan itu akan dihapus !!! semua kemungkinan tag html (saya harap).sumber
<script>
menjadi<script>
.