ฉันเขียนฟังก์ชั่นเล็ก ๆ ซึ่งทำสิ่งนี้ มันหนี"
, &
, <
และ>
( แต่มักนั่นคือทั้งหมดที่คุณต้องการอยู่แล้ว) มันมีความสง่างามกว่าเล็กน้อยจากนั้นโซลูชันที่นำเสนอก่อนหน้านี้จะใช้วิธีเดียว .replace()
ในการทำ Conversion ทั้งหมด ( แก้ไข 2:ความซับซ้อนของรหัสที่ลดลงทำให้ฟังก์ชั่นมีขนาดเล็กลงและน้อยลงหากคุณสงสัยเกี่ยวกับรหัสต้นฉบับดูที่ส่วนท้ายของคำตอบนี้)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
นี่คือ Javascript ธรรมดาไม่มีการใช้ jQuery
หลบหนี/
และ'
เกินไป
แก้ไขเพื่อตอบสนองต่อความคิดเห็นของmklement
ฟังก์ชั่นด้านบนสามารถขยายได้อย่างง่ายดายเพื่อรวมอักขระใด ๆ ในการระบุตัวละครที่จะหลบหนีให้มากขึ้นเพียงแค่ใส่ทั้งสองในคลาสตัวละครในนิพจน์ปกติ (เช่นภายใน/[...]/g
) และเป็นรายการในchr
วัตถุ ( แก้ไข 2:ย่อฟังก์ชั่นนี้ด้วยวิธีเดียวกัน)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
โปรดสังเกตการใช้'
apostrophe ด้านบน(เอนทิตีสัญลักษณ์'
อาจถูกใช้แทน - ถูกกำหนดใน XML แต่เดิมไม่รวมอยู่ในข้อมูลจำเพาะ HTML และเบราว์เซอร์ทั้งหมดอาจไม่รองรับดังนั้นโปรดดู: บทความ Wikipedia เกี่ยวกับการเข้ารหัสอักขระ HTML ) ฉันยังจำการอ่านบางที่ว่าการใช้หน่วยงานทศนิยมได้รับการสนับสนุนอย่างกว้างขวางมากกว่าการใช้เลขฐานสิบหก แต่ฉันไม่สามารถหาแหล่งที่มาได้ในขณะนี้ (และไม่สามารถมีเบราว์เซอร์จำนวนมากที่ไม่สนับสนุนเอนทิตีเลขฐานสิบหก)
หมายเหตุ: การเพิ่ม/
และ'
ไปยังรายการของอักขระที่ใช้ Escape นั้นไม่ใช่สิ่งที่มีประโยชน์ทั้งหมดเนื่องจากไม่มีความหมายพิเศษใน HTML และไม่จำเป็นต้องใช้ Escape
escapeHtml
ฟังก์ชั่นดั้งเดิม
แก้ไข 2:ฟังก์ชั่นเดิมใช้ตัวแปร ( chr
) เพื่อเก็บวัตถุที่จำเป็นสำหรับการ.replace()
โทรกลับ ตัวแปรนี้ต้องการฟังก์ชันที่ไม่ระบุชื่อพิเศษเพื่อกำหนดขอบเขตทำให้ฟังก์ชัน (โดยไม่จำเป็น) ใหญ่ขึ้นและซับซ้อนขึ้นเล็กน้อย
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
ฉันยังไม่ได้ทดสอบเวอร์ชันใดในสองเวอร์ชันที่เร็วกว่า ถ้าเป็นเช่นนั้นคุณสามารถเพิ่มข้อมูลและลิงค์เกี่ยวกับมันได้ที่นี่