Trik jQuery tidak menyandikan tanda kutip dan di IE itu akan menghapus spasi Anda.
Berdasarkan templatetag melarikan diri di Django, yang saya kira sudah banyak digunakan / diuji, saya membuat fungsi ini yang melakukan apa yang dibutuhkan.
Ini bisa dibilang lebih sederhana (dan mungkin lebih cepat) daripada pemecahan masalah untuk masalah pengupasan spasi putih - dan mengkodekan tanda kutip, yang penting jika Anda akan menggunakan hasil di dalam nilai atribut misalnya.
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
Pembaruan 2013-06-17:
Dalam mencari pelarian tercepat saya telah menemukan implementasi replaceAll
metode ini:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(juga dirujuk di sini: Tercepat metode untuk mengganti semua instance karakter dalam string )
Beberapa hasil kinerja di sini:
http://jsperf.com/htmlencoderegex/25
Ini memberikan string hasil yang identik dengan replace
rantai bawaan di atas. Aku akan sangat senang jika seseorang bisa menjelaskan mengapa ini lebih cepat !?
Pembaruan 2015-03-04:
Saya baru saja memperhatikan bahwa AngularJS menggunakan persis metode di atas:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Mereka menambahkan beberapa penyempurnaan - mereka tampaknya menangani masalah Unicode yang tidak jelas serta mengubah semua karakter non-alfanumerik ke entitas. Saya mendapat kesan bahwa yang terakhir tidak diperlukan selama Anda memiliki charset UTF8 yang ditentukan untuk dokumen Anda.
Saya akan perhatikan bahwa (4 tahun kemudian) Django masih tidak melakukan hal-hal ini, jadi saya tidak yakin seberapa pentingnya hal itu:
https://github.com/django/django/django/blob/1.8b1/django/utils /html.py#L44
Pembaruan 2016-04-06:
Anda mungkin juga ingin melarikan diri ke garis miring /
. Ini tidak diperlukan untuk penyandian HTML yang benar, namun direkomendasikan oleh OWASP sebagai langkah keamanan anti-XSS. (terima kasih kepada @JNF untuk menyarankan ini dalam komentar)
.replace(/\//g, '/');