Tôi đã viết một chức năng nhỏ bé mà làm điều này. Nó chỉ thoát "
, &
, <
và >
(nhưng thường đó là tất cả bạn cần anyway). Nó thanh lịch hơn một chút sau đó các giải pháp được đề xuất trước đó ở chỗ nó chỉ sử dụng một .replace()
để thực hiện tất cả các chuyển đổi. ( EDIT 2: Giảm độ phức tạp của mã làm cho hàm nhỏ hơn và gọn gàng hơn, nếu bạn tò mò về mã gốc, hãy xem phần cuối của câu trả lời này.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&<>]/g, function (a) {
return { '"': '"', '&': '&', '<': '<', '>': '>' }[a];
});
}
Đây là Javascript đơn giản, không sử dụng jQuery.
Chạy trốn /
và '
quá
Chỉnh sửa để đáp lại bình luận của mkuity .
Các chức năng trên có thể dễ dàng được mở rộng để bao gồm bất kỳ nhân vật. Để chỉ định thêm ký tự để thoát, chỉ cần chèn cả hai trong lớp ký tự trong biểu thức chính quy (tức là bên trong /[...]/g
) và dưới dạng một mục trong chr
đối tượng. ( EDIT 2: Rút ngắn chức năng này theo cách tương tự.)
function escapeHtml(text) {
'use strict';
return text.replace(/[\"&'\/<>]/g, function (a) {
return {
'"': '"', '&': '&', "'": ''',
'/': '/', '<': '<', '>': '>'
}[a];
});
}
Lưu ý cách sử dụng '
dấu nháy đơn ở trên (thực thể tượng trưng '
có thể đã được sử dụng thay thế - nó được định nghĩa bằng XML, nhưng ban đầu không được bao gồm trong đặc tả HTML và do đó có thể không được hỗ trợ bởi tất cả các trình duyệt. Xem: Bài viết Wikipedia về mã hóa ký tự HTML. ). Tôi cũng nhớ lại việc đọc ở đâu đó rằng sử dụng các thực thể thập phân được hỗ trợ rộng rãi hơn so với sử dụng thập lục phân, nhưng dường như tôi không thể tìm thấy nguồn cho điều đó ngay bây giờ. (Và không thể có nhiều trình duyệt ngoài đó không hỗ trợ các thực thể thập lục phân.)
Lưu ý: Việc thêm /
và '
vào danh sách các ký tự thoát không hoàn toàn hữu ích, vì chúng không có bất kỳ ý nghĩa đặc biệt nào trong HTML và không cần phải thoát.
escapeHtml
Chức năng gốc
EDIT 2: Hàm ban đầu đã sử dụng một biến ( chr
) để lưu trữ đối tượng cần thiết cho cuộc .replace()
gọi lại. Biến này cũng cần một hàm ẩn danh bổ sung để phạm vi nó, làm cho hàm (không cần thiết) lớn hơn một chút và phức tạp hơn.
var escapeHtml = (function () {
'use strict';
var chr = { '"': '"', '&': '&', '<': '<', '>': '>' };
return function (text) {
return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
};
}());
Tôi chưa thử nghiệm phiên bản nào trong hai phiên bản nhanh hơn. Nếu bạn làm như vậy, hãy thêm thông tin và liên kết về nó ở đây.