ToolHub
View All Posts

Hướng Dẫn Đầy Đủ Về HTML Entity

HTML entity là một trong những khía cạnh cơ bản nhất nhưng thường bị hiểu sai nhất trong phát triển web. Chúng là cơ chế cho phép trình duyệt hiển thị các ký tự mà nếu không sẽ bị hiểu là HTML markup, và đóng vai trò quan trọng trong bảo mật web. Cho dù bạn đang mã hóa ký tự đặc biệt để ngăn chặn tấn công cross-site scripting, hiển thị ký hiệu toán học, hay đảm bảo nội dung hiển thị chính xác trên các bảng mã khác nhau, hiểu HTML entity là điều cần thiết cho mọi nhà phát triển web.

HTML Entity Là Gì?

HTML entity là chuỗi ký tự đại diện cho một ký tự đơn trong HTML. Entity bắt đầu bằng dấu & và kết thúc bằng dấu chấm phẩy (;). Khi trình duyệt gặp entity, nó sẽ thay thế entity bằng ký tự tương ứng trong quá trình hiển thị. Cơ chế này cho phép bạn bao gồm các ký tự mà nếu không sẽ không thể hoặc có vấn đề trong HTML.

<) bắt đầu một thẻ, dấu lớn hơn (>) kết thúc một thẻ, dấu & bắt đầu một tham chiếu entity. Nếu bạn muốn hiển thị các ký tự này dưới dạng nội dung hiển thị thay vì markup, bạn phải mã hóa chúng thành entity.

Nguyên tắc cốt lõi: Bất kỳ ký tự nào có ý nghĩa đặc biệt trong cú pháp HTML, khi xuất hiện dưới dạng nội dung, phải được mã hóa thành entity. Đây không phải là tùy chọn — đây là yêu cầu của HTML hợp lệ.

Các HTML Entity Phổ Biến

Mặc dù HTML định nghĩa hơn 2.000 entity đặt tên, nhưng chỉ một số ít được sử dụng thường xuyên trong phát triển web hàng ngày. Đây là những entity bạn sẽ gặp và sử dụng nhiều nhất:

Năm Entity Bắt Buộc

Ký TựEntity Đặt TênEntity Thập PhânEntity Thập Lục PhânCách Dùng
&&&Phải luôn mã hóa để tránh nhập nhằng với tham chiếu entity<
<<<Phải mã hóa để ngăn mở thẻ HTML>
>>>Phải mã hóa để ngăn đóng thẻ HTML"
"""Phải mã hóa trong giá trị thuộc tính dấu ngoặc kép'
''Phải mã hóa trong giá trị thuộc tính dấu ngoặc đơnNon-breaking space (ngăn ngắt dòng)Ký hiệu bản quyền

Entity Ký Hiệu Phổ Biến

Ký TựEntity Đặt TênMô Tả
Ký hiệu đã đăng kýKý hiệu thương hiệuDấu gạch ngang dài (em dash)
Dấu gạch ngang ngắn (en dash, cho phạm vi)Dấu ngoặc kép góc tráiDấu ngoặc kép góc phải
Ký tự bulletDấu chấm lửng ngang (ba chấm) Registered trademark symbol
&trade; Trademark symbol
&mdash; Em dash (long dash)
&ndash; En dash (short dash, for ranges)
«&laquo; Left-pointing double angle quotation mark
»&raquo; Right-pointing double angle quotation mark
&bull; Bullet character
&hellip; Horizontal ellipsis (three dots)

Entity Số và Entity Đặt Tên

HTML entity có hai dạng: đặt tên và số. Hiểu sự khác biệt giúp bạn chọn entity phù hợp trong từng tình huống.

Entity Đặt Tên

< đại diện cho dấu nhỏ hơn, © đại diện cho ký hiệu bản quyền. Entity đặt tên dễ đọc và ghi nhớ hơn, làm cho mã nguồn HTML của bạn dễ bảo trì hơn. Tuy nhiên, entity đặt tên chỉ tồn tại cho một tập ký tự giới hạn — khoảng 2.000, trong khi Unicode có hơn 140.000 ký tự.

Entity Số

Entity số tham chiếu ký tự thông qua mã Unicode. Chúng có hai dạng: thập phân và thập lục phân. Entity số thập phân sử dụng định dạng &#NNN;, trong đó NNN là mã thập phân. Entity thập lục phân sử dụng định dạng &#xHHH;, trong đó HHH là mã thập lục phân. Ví dụ: ký hiệu bản quyền có thể viết là © (thập phân) hoặc © (thập lục phân).

Entity số có thể biểu diễn bất kỳ ký tự Unicode nào, làm cho chúng cần thiết cho các ký tự không có tham chiếu entity đặt tên. Nếu bạn cần hiển thị ký tự CJK hiếm, glyph chữ viết lịch sử hoặc emoji thiếu entity đặt tên, bạn phải sử dụng dạng số.

Khi Nào Sử Dụng Loại Nào

Khi Nào Sử Dụng HTML Entity

Biết khi nào sử dụng entity cũng quan trọng như biết cách sử dụng. Đây là các tình huống chính mà entity là cần thiết hoặc có lợi:

1. Hiển Thị Ký Tự Dành Riêng

<. Nếu bạn viết < trần, trình duyệt sẽ cố gắng phân tích nó như phần đầu của thẻ HTML, điều này có thể phá vỡ bố cục trang hoặc tạo lỗ hổng bảo mật.

2. Ngăn Chặn Nhập Nhằng Dấu &

Dấu & theo sau bởi chữ cái và dấu chấm phẩy luôn được hiểu là tham chiếu entity. Nếu nội dung của bạn có dấu & không thuộc entity (ví dụ: trong "Tom & Jerry"), bạn phải mã hóa nó thành &. Dấu & không được mã hóa theo sau bởi văn bản trùng khớp với tên entity sẽ bị giải mã sai.

3. Bao Gồm Ký Tự Không Có Trên Bàn Phím

Các ký tự như dấu gạch ngang dài, ký hiệu bản quyền và toán tử toán học có thể khó nhập trên bàn phím tiêu chuẩn. Entity cung cấp cách đáng tin cậy để bao gồm các ký tự này mà không phụ thuộc vào phương thức nhập của trình soạn thảo hoặc bản đồ ký tự.

4. Non-Breaking Space

Entity   tạo ra non-breaking space, ngăn trình duyệt ngắt dòng tại vị trí đó. Điều này quan trọng để giữ các từ liên quan trên cùng một dòng, như "10 kg", "Chương 3" hoặc tên thương hiệu không nên bị ngắt dòng.

Tác Động Bảo Mật: Phòng Chống XSS

Mã hóa HTML entity là một trong những tuyến phòng thủ quan trọng nhất chống lại tấn công Cross-Site Scripting (XSS). XSS xảy ra khi kẻ tấn công có thể tiêm mã thực thi vào trang web mà người dùng khác xem. Mã hóa entity ngăn chặn điều này bằng cách chuyển đổi các ký tự nguy hiểm thành dạng entity an toàn tương đương.

Mã Hóa Entity Ngăn Chặn XSS Như Thế Nào

và trang hiển thị không mã hóa, trình duyệt sẽ thực thi script đó. Tuy nhiên, nếu đầu ra được mã hóa entity, nó trở thành <script>alert('xss')</script>, trình duyệt hiển thị nó dưới dạng văn bản theo nghĩa đen thay vì thực thi code.

Quy Tắc Mã Hóa Theo Ngữ Cảnh Cụ Thể

Mã hóa entity hoạt động trong ngữ cảnh nội dung HTML và thuộc tính, nhưng các ngữ cảnh khác nhau yêu cầu chiến lược mã hóa khác nhau: