Saya menulis fungsi kecil kecil yang melakukan ini. Hanya lolos "
, &
, <
dan >
(tapi biasanya itu semua Anda perlu pula). Ini sedikit lebih elegan daripada solusi yang diusulkan sebelumnya karena hanya menggunakan satu .replace()
untuk melakukan semua konversi. ( EDIT 2: Pengurangan kompleksitas kode menjadikan fungsi lebih kecil dan lebih rapi, jika Anda penasaran dengan kode asli, lihat bagian akhir dari jawaban ini.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Ini Javascript biasa, tidak ada jQuery yang digunakan.
Lolos /
dan '
juga
Edit dalam menanggapi komentar mklement .
Fungsi di atas dapat dengan mudah diperluas untuk memasukkan karakter apa pun. Untuk menentukan lebih banyak karakter untuk melarikan diri, cukup masukkan keduanya dalam kelas karakter dalam ekspresi reguler (yaitu di dalam /[...]/g
) dan sebagai entri dalam chr
objek. ( EDIT 2: Mempersingkat fungsi ini juga, dengan cara yang sama.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Perhatikan penggunaan di atas '
untuk tanda kutip (entitas simbolis '
mungkin telah digunakan sebagai gantinya - itu didefinisikan dalam XML, tetapi pada awalnya tidak termasuk dalam spesifikasi HTML dan karenanya mungkin tidak didukung oleh semua browser. Lihat: Artikel Wikipedia tentang penyandian karakter HTML ). Saya juga ingat pernah membaca di suatu tempat yang menggunakan entitas desimal lebih banyak didukung daripada menggunakan heksadesimal, tetapi saya tidak bisa menemukan sumber untuk itu sekarang. (Dan tidak mungkin ada banyak browser di luar sana yang tidak mendukung entitas heksadesimal.)
Catatan: Menambahkan /
dan '
ke daftar karakter yang lolos tidak terlalu berguna, karena mereka tidak memiliki arti khusus dalam HTML dan tidak perlu diloloskan.
escapeHtml
Fungsi Asli
EDIT 2: Fungsi asli menggunakan variabel ( chr
) untuk menyimpan objek yang diperlukan untuk .replace()
panggilan balik. Variabel ini juga membutuhkan fungsi anonim tambahan untuk membuat ruang lingkup, membuat fungsi (tidak perlu) sedikit lebih besar dan lebih kompleks.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Saya belum menguji versi mana dari dua versi yang lebih cepat. Jika Anda melakukannya, jangan ragu untuk menambahkan info dan tautan di sini.