HTML Encoder

HTML Encoder / Decoder

Escape `& < > " '` thành các HTML entity an toàn, hoặc giải mã văn bản đã escape entity về dạng thuần. Bốn cấp độ mã hóa — Minimal, Named, Numeric, All non-ASCII. An toàn UTF-8 + emoji + CJK, ngay trong trình duyệt của bạn.

Mặc định nên dùng Minimal — chỉ escape & < > " ', năm ký tự phá vỡ ngữ cảnh body / attribute của HTML. Đây là điều mọi templating engine hiện đại đều làm. Dùng Named entities nếu bạn muốn copyright / nbsp / mũi tên v.v. dưới dạng mã dễ đọc (&copy; thay vì &#169;). Dùng Numeric khi gửi HTML qua các pipeline có thể không hiểu named entity. Dùng All non-ASCII khi nhắm tới hệ thống chỉ chấp nhận ASCII (máy chủ email cũ, API hỏng).

&apos; hợp lệ trong XML và HTML5, nhưng không trong HTML 4.01 — trình duyệt cũ hiển thị nó dưới dạng văn bản nguyên văn '. Tham chiếu số &#39; hoạt động ở mọi nơi. Bộ giải mã chấp nhận &apos; làm đầu vào để tương thích.

Đầu vào
Kết quả

Xây dựng cho đầu ra HTML an toàn

Escape nội dung người dùng cho template, giải mã dữ liệu đã mã hóa entity — và một vài chi tiết nhỏ giúp dùng thực sự thú vị.

Bốn chế độ mã hóa

Minimal chỉ escape năm ký tự không an toàn trong HTML (& < > " ') — mặc định phù hợp cho nội dung do người dùng tạo. Named dùng các entity HTML5 dễ đọc như &copy; / &nbsp; / &hearts; khi có sẵn. Numeric mã hóa mọi codepoint non-ASCII thành &#NN;. All non-ASCII mã hóa mọi codepoint nằm ngoài ASCII có thể in được, dùng cho pipeline cũ / chỉ ASCII.

Giải mã mọi entity

Bộ giải mã xử lý named entity (&copy;), numeric thập phân (&#169;), và numeric hex (&#xA9;). Các codepoint surrogate-pair (emoji, chữ viết cổ) round-trip chính xác qua UTF-16.

Xem trước trực tiếp

Kết quả cập nhật theo từng phím gõ — không cần nhấn nút Encode / Decode. Đổi hướng chỉ một cú nhấp; nút Hoán đổi chuyển kết quả trở lại đầu vào để bạn có thể xâu chuỗi nhiều phép biến đổi.

An toàn UTF-8 + emoji + CJK

Mọi codepoint Unicode round-trip nguyên vẹn: 中文, العربية, русский, हिंदी, 🎉, Þorgeir. Encoder duyệt theo từng codepoint (không dùng charAt) nên các surrogate pair luôn nguyên vẹn.

Quyền riêng tư từ thiết kế

Văn bản của bạn ở lại trên thiết bị. Encoder, decoder, bảng named-entity đều chạy bằng JavaScript cục bộ. Mở DevTools → Network và kiểm chứng không có request đi ra nào.

Nhỏ + nhanh

JavaScript thuần, không runtime framework. Tải nguội dưới 25 KB gzip. Một tài liệu HTML 100 KB được mã hóa trong dưới 5 ms.

Cách mã hóa hoặc giải mã HTML entity

Bốn bước từ văn bản thô đến đầu ra an toàn entity.

  1. 1

    Dán văn bản của bạn

    Thả văn bản thuần hoặc HTML vào ô Đầu vào. Bất cứ thứ gì cũng được — bình luận người dùng, bài blog, emoji, CJK, chữ viết RTL. Encoder duyệt theo codepoint nên các chuỗi đa byte luôn nguyên vẹn.

  2. 2

    Chọn hướng + chế độ

    Đặt Hướng thành Mã hóa (văn bản → entity) hoặc Giải mã (entity → văn bản). Với Mã hóa, chọn chế độ: Minimal cho template, Named cho entity dễ đọc, Numeric để mã hóa non-ASCII thành &#NN;, All non-ASCII để có đầu ra chỉ-ASCII.

  3. 3

    Xem trước trực tiếp

    Kết quả cập nhật theo từng phím gõ. So sánh các chế độ theo thời gian thực bằng cách đổi dropdown. Dùng Hoán đổi để chuyển kết quả ngược về đầu vào — hữu ích để xác minh round-trip (mã hóa rồi giải mã = bản gốc).

  4. 4

    Sao chép hoặc tải xuống

    Dùng biểu tượng sao chép để đẩy kết quả vào clipboard, hoặc biểu tượng tải xuống để lưu thành output.encode.html / output.decode.txt. Phần chênh lệch kích thước (ký tự / byte vào → ra) cho biết chính xác việc mã hóa làm văn bản phình to hay co lại bao nhiêu.

Xây dựng cho công việc web-dev hằng ngày

Bốn tình huống phổ biến mà công cụ trình duyệt ưu tiên quyền riêng tư đánh bại việc dán code vào một bộ mã hóa trực tuyến ngẫu nhiên.

Nhúng nội dung người dùng vào template một cách an toàn

Bình luận người dùng, phản hồi biểu mẫu, truy vấn tìm kiếm — bất cứ thứ gì đến từ bên ngoài rồi nằm trong <p>, <li> hoặc attribute. Chạy qua mã hóa Minimal trước khi nối chuỗi vào HTML, và bạn an toàn trước markup hỏng và các payload XSS đơn giản nhất.

Đọc dữ liệu đã escape entity từ API

Một số API trả về chuỗi đã được escape entity sẵn (RSS feed, một số export CMS, HTML scrape). Dán vào, nhấn Giải mã, nhận lại Unicode gốc. Bộ giải mã xử lý entity dạng tên, thập phân và hex bao gồm cả surrogate pair.

Tiêu đề email + thẻ meta

<title>, <meta name="description">, <meta property="og:title"> — tất cả đều cần escape entity cho ký tự đặc biệt. Mã hóa tiêu đề một lần, dán vào cả ba.

Nội dung nhạy cảm không thể gửi đến dịch vụ bên thứ ba

Nội dung CMS nội bộ, dữ liệu khách hàng, template được bảo vệ bởi NDA — bất cứ thứ gì bạn không thể dán vào một bộ mã hóa cloud. Công cụ chạy hoàn toàn trên trình duyệt giữ mọi byte ở lại máy của bạn. Mở DevTools → Network và kiểm chứng không có gì rời đi.

100% riêng tư — chạy trong trình duyệt của bạn

Văn bản của bạn không bao giờ rời khỏi thiết bị. Mở DevTools → Network và bạn sẽ thấy không có request đi ra nào trong khi mã hóa hoặc giải mã.

  • Encoder, decoder và bảng tra named-entity đều chạy bằng JavaScript trên máy của bạn — không có chuyển đổi phía máy chủ, không có API bên thứ ba.
  • Các codepoint surrogate-pair (emoji, chữ viết cổ) được xử lý bằng duyệt theo codepoint, không phải ánh xạ mức byte — nên một lần dán 🎉 vẫn là 🎉 sau round-trip.
  • Không đăng nhập, không telemetry trên nội dung văn bản. Chúng tôi chỉ dùng một cookie cho trạng thái đồng ý cookie và một cho tùy chọn ngôn ngữ.

Hướng dẫn liên quan

Những bài đọc tuyển chọn về escape HTML, bảng entity và templating an toàn.

Câu hỏi thường gặp

Tôi nên chọn chế độ nào?

Mặc định nên dùng Minimal — chỉ escape & < > " ', năm ký tự phá vỡ ngữ cảnh body / attribute của HTML. Đây là điều mọi templating engine hiện đại đều làm. Dùng Named entities nếu bạn muốn copyright / nbsp / mũi tên v.v. dưới dạng mã dễ đọc (&copy; thay vì &#169;). Dùng Numeric khi gửi HTML qua các pipeline có thể không hiểu named entity. Dùng All non-ASCII khi nhắm tới hệ thống chỉ chấp nhận ASCII (máy chủ email cũ, API hỏng).

Vì sao công cụ escape `'` thành `&#39;` chứ không phải `&apos;`?

&apos; hợp lệ trong XML và HTML5, nhưng không trong HTML 4.01 — trình duyệt cũ hiển thị nó dưới dạng văn bản nguyên văn '. Tham chiếu số &#39; hoạt động ở mọi nơi. Bộ giải mã chấp nhận &apos; làm đầu vào để tương thích.

Emoji và ký tự CJK có còn nguyên không?

Có. Bộ mã hóa duyệt theo codepoint (không phải đơn vị mã UTF-16), nên emoji như 🎉 (U+1F389) trở thành &#127881; khi mã hóa và round-trip chính xác khi giải mã. Tương tự với CJK (中文 → &#20013;&#25991; ở chế độ numeric).

Có an toàn khi nhúng dữ liệu người dùng trực tiếp vào HTML sau khi mã hóa không?

Đối với HTML body và attribute — có, với chế độ Minimal. Đối với ngữ cảnh URL (href="...") bạn còn cần URL encoding. Đối với JavaScript hoặc CSS inline, cả HTML lẫn URL encoding đều không đủ — dùng templating engine hiểu các ngữ cảnh đó. Đừng bao giờ dán dữ liệu người dùng chưa escape vào khối <script>.

Có gì được gửi tới máy chủ của bạn không?

Không. Bộ mã hóa, giải mã và bảng tra named-entity đều chạy bằng JavaScript trên thiết bị của bạn. Mở DevTools → Network và bạn sẽ thấy không có request đi ra nào trong khi mã hóa hoặc giải mã. Dán bí mật, dữ liệu khách hàng, template nội bộ — không có gì rời khỏi máy của bạn.