Công cụ mã hóa & giải mã HTML entity
Escape các ký tự mà HTML coi là mã đánh dấu, có thể kèm cả mọi ký tự ngoài ASCII, hoặc chuyển các entity như é và — về lại văn bản thuần. Cả hai chiều đều chạy ngay trên trình duyệt của bạn, và dữ liệu đã giải mã không bao giờ được hiển thị dưới dạng HTML thực thi.
0 ký tự · 0 từ · 0 dòng
0 ký tự · 0 từ · 0 dòng
Chạy hoàn toàn trong tab trình duyệt này. Văn bản của bạn không bao giờ được tải lên hay lưu trữ.
Các ký tự thông dụng và thực thể tương ứng
Dạng có tên, thập phân và thập lục phân đều giải mã ra cùng một ký tự. Bộ mã hóa biết 216 thực thể có tên thông dụng; bộ giải mã hiểu mọi tham chiếu có tên trong chuẩn HTML.
| Ký tự | Có tên | Thập phân | Hex |
|---|---|---|---|
& | & | & | & |
< | < | < | < |
> | > | > | > |
" | " | " | " |
' | ' | ' | ' |
(dấu cách không ngắt) | |   |   |
© | © | © | © |
® | ® | ® | ® |
™ | ™ | ™ | ™ |
€ | € | € | € |
£ | £ | £ | £ |
¥ | ¥ | ¥ | ¥ |
— | — | — | — |
– | – | – | – |
… | … | … | … |
« | « | « | « |
» | » | » | » |
° | ° | ° | ° |
× | × | × | × |
÷ | ÷ | ÷ | ÷ |
é | é | é | é |
π | π | π | π |
→ | → | → | → |
😀 | — | 😀 | 😀 |
Từ 252 entity trong HTML 4 đến 2.231 entity trong HTML5
Tham chiếu ký tự là cách viết một ký tự chỉ bằng ASCII. Tham chiếu dạng số dùng được cho mọi điểm mã Unicode, ở hệ thập phân (é) hoặc thập lục phân (é). Tham chiếu dạng tên dễ nhớ hơn: HTML 4 định nghĩa 252 tên, gồm các chữ cái Latin-1 như é, chữ cái Hy Lạp, ký hiệu toán học và dấu câu in ấn như — và …. Điều thú vị là ' không nằm trong số đó; nó xuất phát từ XML và chỉ trở thành hợp lệ trong HTML từ HTML5.
HTML5 mở rộng danh sách lên 2.231 tham chiếu ký tự dạng tên, bao gồm cả bộ thực thể MathML, nên các tên như ✓, ★ và ≂̸ hiện hoạt động trên mọi trình duyệt hiện hành. Con số này gồm cả các cách viết cũ không có dấu chấm phẩy kết thúc, như & và © trình phân tích vẫn chấp nhận để tương thích, nhưng bạn không nên viết như vậy. Bộ mã hóa ở đây tạo ra các tên HTML 4 được hỗ trợ rộng rãi cùng ', và dùng tham chiếu dạng số cho mọi ký tự còn lại; bộ giải mã chuyển văn bản cho trình phân tích của chính trình duyệt, nên hiểu được cả 2.231 tên.
Cần escape những gì và khi nào escape là chưa đủ
Only & < > " ' là thiết lập cho công việc thường ngày: nó escape năm ký tự có thể kết thúc một nút văn bản hoặc một thuộc tính trong dấu ngoặc kép, đủ để hiển thị đoạn mã mẫu trên trang hoặc đặt văn bản người dùng nhập vào HTML một cách an toàn. Also every non-ASCII character biến cả é, € và emoji thành tham chiếu, dành cho những kênh hiếm hoi không truyền được UTF-8, chẳng hạn một số mẫu email cũ hoặc hệ thống làm hỏng bảng mã. Named, Decimal và Hex chỉ thay đổi cách viết tham chiếu; cả ba đều giải mã ra cùng một ký tự. Trang lưu bằng UTF-8 không cần thực thể cho chữ có dấu.
Escape chỉ bảo vệ ngữ cảnh HTML, không bảo vệ gì khác. Văn bản chèn vào khối script, trình xử lý sự kiện nội tuyến như onclick, thuộc tính style hoặc href có thể bắt đầu bằng javascript: cần cách xử lý khác, và chỉ mã hóa thực thể thì không ngăn được tấn công cross-site scripting ở đó. Các framework như React escape văn bản theo mặc định, nên lỗi escape hai lần phổ biến hơn trong ứng dụng hiện đại: người dùng thấy & ở chỗ lẽ ra là dấu &. Để loại bỏ hoàn toàn thẻ, hãy chuyển đổi mã đánh dấu bằng HTML sang TXT; để escape trong URL, dùng Mã hóa & giải mã URL.
Câu hỏi thường gặp
- Những ký tự nào bắt buộc phải escape trong HTML?
- Trong văn bản, & và < là bắt buộc, còn > được escape theo thông lệ. Trong giá trị thuộc tính, cần escape thêm ký tự dấu ngoặc bao quanh giá trị đó. Escape cả năm ký tự là đủ cho cả hai trường hợp.
- khác gì so với dấu cách thông thường?
là khoảng trắng không ngắt dòng, U+00A0. Trông giống khoảng trắng nhưng ngăn việc xuống dòng tại vị trí đó và không bị gộp lại khi có nhiều ký tự liên tiếp, khác với khoảng trắng thông thường trong HTML.- Vì sao trang của tôi hiển thị & thay cho dấu &?
- Văn bản đã bị escape hai lần: một lần trong dữ liệu của bạn và một lần nữa bởi mẫu hoặc framework. Hãy lưu văn bản gốc và để một lớp, thường là mẫu, thực hiện escape khi xuất ra.
- Giải mã HTML từ nguồn không tin cậy ở đây có an toàn không?
- Có. Bộ giải mã phân tích đầu vào như nội dung văn bản thuần, nên thẻ không được tạo, script không chạy và hình ảnh không được tải. Chỉ các tham chiếu thực thể được chuyển thành ký tự.
- Nên dùng entity dạng tên hay dạng số?
- Dạng tên dễ đọc hơn, dạng số dùng được cho mọi ký tự và trong mọi trình phân tích XML. Trong XML không có DTD, chỉ
&,<,>,"và'được định nghĩa sẵn.