เคล็ดลับ jQuery ไม่ได้เข้ารหัสเครื่องหมายคำพูดและใน IE มันจะตัดช่องว่างของคุณ
จากการหลบหนี templatetag ใน Django ซึ่งฉันคิดว่ามีการใช้ / ทดสอบอย่างหนักแล้วฉันได้สร้างฟังก์ชั่นนี้ซึ่งทำสิ่งที่ต้องการ
มันเป็นเนื้อหาที่ง่ายกว่า (และอาจเร็วกว่า) สำหรับการแก้ไขปัญหาช่องว่างใด ๆ - และมันเข้ารหัสเครื่องหมายคำพูดซึ่งเป็นสิ่งสำคัญหากคุณจะใช้ผลลัพธ์ภายในค่าแอตทริบิวต์ตัวอย่างเช่น
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, '&');
}
อัปเดต 2013-06-17:
ในการค้นหาการหลบหนีที่เร็วที่สุดฉันได้พบการใช้replaceAll
วิธีนี้:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(อ้างอิงที่นี่: เร็วที่สุด วิธีการเพื่อแทนที่อินสแตนซ์ทั้งหมดของอักขระในสตริง )
ผลลัพธ์ประสิทธิภาพบางอย่างที่นี่:
http://jsperf.com/htmlencoderegex/25
มันให้สตริงผลลัพธ์ที่เหมือนกันกับreplace
โซ่บิวด์อินด้านบน ฉันมีความสุขมากถ้ามีคนอธิบายได้ว่าทำไมมันเร็วขึ้น!
อัปเดต 2015-03-04:
ฉันเพิ่งสังเกตเห็นว่า AngularJS ใช้วิธีการด้านบนทั้งหมด:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
พวกเขาเพิ่มการปรับแต่งสองสามครั้ง - ดูเหมือนว่าพวกเขากำลังจัดการกับปัญหา Unicode ที่คลุมเครือเช่นเดียวกับการแปลงอักขระที่ไม่ใช่ตัวอักษรและตัวเลขทั้งหมดเป็นเอนทิตี ฉันอยู่ภายใต้การแสดงผลหลังไม่จำเป็นตราบใดที่คุณมีชุดอักขระ UTF8 ที่ระบุไว้สำหรับเอกสารของคุณ
ฉันจะทราบว่า (4 ปีต่อมา) Django ยังไม่ได้ทำสิ่งเหล่านี้อย่างใดอย่างหนึ่งดังนั้นฉันไม่แน่ใจว่าพวกเขามีความสำคัญ:
https://github.com/django/django/django/blob/1.8b1/django/utils /html.py#L44
อัพเดท 2016/04/06:คุณอาจต้องการที่จะหลบหนีไปข้างหน้าเฉือน
/
ไม่จำเป็นสำหรับการเข้ารหัส HTML ที่ถูกต้องอย่างไรก็ตามOWASP แนะนำให้ใช้เป็นมาตรการความปลอดภัย anti-XSS (ขอบคุณ @JNF สำหรับการแนะนำสิ่งนี้ในความคิดเห็น)
.replace(/\//g, '/');