Tới nội dung chính
Toolbase

Mã hoá thực thể HTML

Mã hoá văn bản cho HTML và giải mã thực thể về chữ đọc được.

Chạy hoàn toàn trong trình duyệt

Việc chuyển đổi diễn ra ngay trong trang này bằng một bảng tra chứ không dùng bộ phân tích HTML của trình duyệt. Không tải gì lên và không có gì được dựng thành HTML.

HTML có năm ký tự mà nó không thể hiểu theo nghĩa đen. Dấu và mở đầu một thực thể, hai dấu ngoặc nhọn mở và đóng thẻ, còn dấu nháy thì kết thúc giá trị thuộc tính. Ở bất cứ đâu cần những ký tự đó xuất hiện đúng như chính nó — trong một đoạn mã ví dụ, trong tên sản phẩm, trong đoạn chữ người dùng vừa gõ — chúng phải được viết dưới dạng thực thể.

Tìm hiểu thêm về Mã hoá thực thể HTML

Công cụ này chuyển đổi theo cả hai chiều. Chiều mã hoá là chiều quyết định an toàn: văn bản đưa vào trang buộc phải được mã hoá, vì dấu `<` chưa mã hoá chính là toàn bộ cơ chế của lỗ hổng cross-site scripting. Chiều giải mã là chiều dùng hằng ngày: một chuỗi từ API hay từ bản xuất CMS về đã ở dạng mã hoá sẵn, đôi khi mã hoá hai lần, và bạn cần thấy nó thật sự viết gì.

Có hai mức mã hoá. Mức tối thiểu chỉ mã hoá đúng năm ký tự cần thiết, chừng đó là đủ để an toàn và giữ cho kết quả còn đọc được. Mức đầy đủ chuyển thêm mọi chữ có dấu và ký tự ngoài Latin thành tham chiếu số, và bạn chỉ cần đến nó khi đoạn văn phải đi qua một đường truyền không chắc chắn dùng UTF-8 — một mẫu email cũ, một trường CMS đời trước làm hỏng mọi thứ ngoài ASCII.

Bộ giải mã ở đây không đụng tới DOM. Cách làm tắt thông thường là gán chuỗi vào `innerHTML` rồi đọc lại `textContent`; cách đó chạy được và là một lỗ hổng bảo mật: nó đưa đoạn HTML không tin cậy cho một bộ phân tích thật, và một thẻ `<img onerror>` trong dữ liệu vào sẽ chạy trước khi bạn kịp đọc lại gì. Bộ giải mã này chỉ là một bảng tra kèm biểu thức chính quy, nên không có bộ phân tích nào để mà khai thác.

Những thực thể nó không nhận ra sẽ được giữ nguyên văn. Bỏ đi thì mất thông tin, mà đoán bừa thì bịa thêm thông tin, và không cách nào trong hai cách đó là kết quả tốt khi bạn đang cố tìm hiểu một chuỗi thật sự chứa những gì.

  • Mã hoá và giải mã thực thể HTML theo cả hai chiều
  • Chế độ tối thiểu mã hoá đúng năm ký tự cần thiết, không hơn
  • Chế độ đầy đủ mã hoá mọi ký tự ngoài ASCII cho đường truyền cần đến
  • Tham chiếu số ở dạng thập phân hoặc hex, tuỳ nơi nhận yêu cầu gì
  • Giải mã không bao giờ đụng innerHTML, nên mã độc không được phân tích
  • Thực thể lạ được giữ nguyên chính xác, không bị bỏ đi hay đoán bừa
  • Xử lý emoji và ký tự hiếm thành một tham chiếu, không tách làm đôi

Cách sử dụng

  1. 1Dán văn bản hoặc đoạn HTML đã mã hoá của bạn vào ô nhập.
  2. 2Chọn Mã hoá hoặc Giải mã.
  3. 3Khi mã hoá, chọn mức tối thiểu để an toàn với HTML, hoặc mức đầy đủ cho đường truyền không dùng UTF-8.
  4. 4Sao chép kết quả, hoặc bấm đảo chiều để đưa nó chạy ngược lại.

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

Thực ra những ký tự nào bắt buộc phải mã hoá?

Trong phần chữ của trang là dấu và cùng dấu ngoặc nhọn mở; bên trong giá trị thuộc tính thì thêm dấu nháy đang bao quanh nó. Công cụ này mã hoá cả năm ký tự đó, vì tập ấy an toàn ở mọi vị trí mà chẳng tốn thêm gì.

Mã hoá HTML có làm trang tôi an toàn trước XSS không?

Cần nhưng chưa đủ. Mã hoá bảo vệ phần chữ đặt vào HTML; còn giá trị đi vào URL, vào khối style hay vào script thì cần cách mã hoá khác, và tốt nhất là tránh ghép HTML từ chuỗi khi đã có template lo việc đó.

Vì sao văn bản của tôi hiện &amp;amp; thay vì &?

Nó bị mã hoá hai lần — dấu `&` của một thực thể sẵn có lại bị mã hoá thêm lần nữa. Hãy giải mã một lần rồi xem kết quả đã đọc đúng chưa trước khi giải mã tiếp.

Thực thể mà công cụ không biết thì sao?

Nó được giữ nguyên đúng như bạn viết. Công cụ chỉ bao những thực thể thực sự xuất hiện trong HTML người ta hay chép, chứ không phải cả 2.200 tên của HTML5, và giữ nguyên phần còn lại thì an toàn hơn là bỏ đi.

Tôi có nên dùng chế độ đầy đủ không?

Chỉ khi có thứ ở phía sau không đáng tin trong việc xử lý UTF-8. Với một trang hiện đại thì nó chỉ làm mã nguồn khó đọc hơn nhiều mà chẳng được gì, vì một trang khai báo đúng vẫn hiển thị chữ có dấu hoàn hảo.

Xem thêm Công cụ lập trình
Esc

16 kết quả