Thủ thuật jQuery không mã hóa dấu ngoặc kép và trong IE nó sẽ loại bỏ khoảng trắng của bạn.
Dựa trên templatetag thoát trong Django, mà tôi đoán là đã được sử dụng / kiểm tra rất nhiều rồi, tôi đã thực hiện chức năng này là những gì cần thiết.
Nó đơn giản hơn (và có thể nhanh hơn) so với bất kỳ cách giải quyết nào cho vấn đề tước khoảng trắng - và nó mã hóa các dấu ngoặc kép, điều này rất cần thiết nếu bạn sẽ sử dụng kết quả bên trong một giá trị thuộc tính chẳng hạn.
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, '&');
}
Cập nhật 2013-06-17:
Trong quá trình tìm kiếm lối thoát nhanh nhất, tôi đã tìm thấy cách triển khai replaceAll
phương pháp này:
http://dumpsite.com/forum/index.php?topic=4.msg29#msg29
(cũng được tham khảo tại đây: Nhanh nhất phương pháp thay thế tất cả các phiên bản của một ký tự trong chuỗi )
Một số kết quả thực hiện tại đây:
http://jsperf.com/htmlencoderegex/25
Nó cung cấp chuỗi kết quả giống hệt nhau cho chuỗi dựng sẵn replace
ở trên. Tôi sẽ rất vui nếu ai đó có thể giải thích tại sao nó nhanh hơn!?
Cập nhật 2015-03-04:
Tôi chỉ nhận thấy rằng AngularJS đang sử dụng chính xác phương pháp trên:
https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
Họ thêm một vài tinh chỉnh - dường như họ đang xử lý một vấn đề Unicode tối nghĩa cũng như chuyển đổi tất cả các ký tự không chữ và số thành các thực thể. Tôi không có ấn tượng gì về điều này là không cần thiết miễn là bạn có bộ ký tự UTF8 được chỉ định cho tài liệu của bạn.
Tôi sẽ lưu ý rằng (4 năm sau) Django vẫn không làm một trong những điều này, vì vậy tôi không chắc chúng quan trọng như thế nào:
https://github.com/django/django/blob/1.8b1/django/utils /html.py#L44
Cập nhật 2016-04-06:
Bạn cũng có thể muốn thoát dấu gạch chéo về phía trước /
. Điều này là không bắt buộc đối với mã hóa HTML chính xác, tuy nhiên, OWASP khuyến nghị sử dụng như một biện pháp an toàn chống XSS. (cảm ơn @JNF đã gợi ý điều này trong các bình luận)
.replace(/\//g, '/');