Về mã hóa URL
URL chỉ có thể chứa một tập hợp hạn chế các ký tự ASCII. Các ký tự đặc biệt như khoảng trắng, dấu & và các chữ cái ngoài ASCII phải được mã hóa phần trăm — thay thế bằng dấu phần trăm theo sau hai chữ số hex. Ví dụ khoảng trắng thành %20.
Công cụ này sử dụng encodeURIComponent, mã hóa tất cả ngoại trừ chữ cái, chữ số và - _ . ! ~ * ( ). Đây là hàm đúng khi mã hóa giá trị tham số chuỗi truy vấn hoặc đoạn đường dẫn, không phải toàn bộ URL.
Cách mã hóa phần trăm (percent-encode) một thành phần URL?
Để mã hóa phần trăm một văn bản dùng trong URL, thay mỗi ký tự nằm ngoài tập ký tự không dành riêng (chữ cái, chữ số và - _ . ! ~ * ' ( )) bằng dấu phần trăm theo sau hai chữ số thập lục phân đại diện giá trị byte UTF-8 của ký tự đó. Ví dụ: "hello world" trở thành "hello%20world" và "café" trở thành "caf%C3%A9".
Các bước mã hóa và giải mã phần trăm một thành phần URL
- Đổi văn bản đầu vào thành byte UTF-8, vì các ký tự không thuộc ASCII có thể được biểu diễn bằng nhiều byte.
- Xét từng byte; nếu nó tương ứng với một ký tự không dành riêng (A-Z, a-z, 0-9, - _ . ! ~ * ' ( )), giữ nguyên không đổi.
- Với mọi byte khác, thay bằng dấu phần trăm theo sau giá trị thập lục phân hai chữ số viết hoa của nó; ví dụ, dấu cách (0x20) trở thành %20.
- Ghép các kết quả thành một chuỗi duy nhất; đó chính là biểu diễn mã hóa phần trăm, an toàn cho URL, của văn bản gốc.
- Để giải mã, tìm dấu % theo sau hai chữ số thập lục phân, đổi ngược mỗi cặp thành giá trị byte, rồi ghép lại các byte UTF-8 để khôi phục văn bản gốc.
Quy tắc mã hóa phần trăm
Byte dành riêng/không an toàn -> %XX, trong đó XX là giá trị byte viết bằng hai chữ số thập lục phân viết hoa
- Ký tự không dành riêng = A-Z, a-z, 0-9, - _ . ! ~ * ' ( ) — không bao giờ bị mã hóa
- %XX = dấu phần trăm cộng hai chữ số thập lục phân đại diện cho một byte trong mã hóa UTF-8 của ký tự gốc
Ví dụ kết quả mã hóa
| Văn bản | Đã mã hóa |
|---|
| hello world | hello%20world |
| a=b&c=d | a%3Db%26c%3Dd |
| café | caf%C3%A9 |
| 100% off! | 100%25%20off! |
| user@example.com | user%40example.com |
Câu hỏi thường gặp
Vì sao encodeURIComponent để nguyên ! ~ * ' ( ) không mã hóa?
Các ký tự này, cùng với chữ cái, chữ số và - _ ., được định nghĩa là an toàn để xuất hiện trực tiếp trong một thành phần URI và không mang ý nghĩa đặc biệt nào ở đó, nên encodeURIComponent trong JavaScript giữ nguyên chúng. Các hàm khác như encodeURI dành riêng một tập ký tự khác rộng hơn, vì chúng dùng để mã hóa cả một URL hoàn chỉnh thay vì chỉ một thành phần.
Mã hóa một thành phần URL khác gì với mã hóa cả một URL?
Mã hóa một thành phần riêng lẻ (như giá trị của một tham số truy vấn) cần thoát các ký tự như & và = để chúng không bị nhầm với cấu trúc của URL. Mã hóa cả một URL hoàn chỉnh cần giữ nguyên các ký tự cấu trúc như :, /, ? và &, để URL vẫn được diễn giải đúng, đó là lý do encodeURIComponent và encodeURI hoạt động khác nhau.
Vì sao dấu cách đôi khi thành %20, đôi khi thành +?
%20 là cách mã hóa phần trăm chung của dấu cách, dùng trong đường dẫn URL và trong đầu ra của encodeURIComponent. Dấu + cho dấu cách là quy ước kế thừa riêng của định dạng application/x-www-form-urlencoded dùng khi gửi biểu mẫu HTML và trong chuỗi truy vấn, không phải quy tắc mã hóa URL chung.
Vì sao việc giải mã báo lỗi với một số đầu vào?
Giải mã thất bại khi dấu % không theo sau bởi hai chữ số thập lục phân hợp lệ, hoặc khi các byte giải mã ra không tạo thành UTF-8 hợp lệ — ví dụ khi dán một chuỗi phần trăm chưa hoàn chỉnh như %E2%9 thiếu byte cuối. Hãy kiểm tra đầu vào là văn bản đầy đủ và đã mã hóa phần trăm đúng cách.
Công cụ này mã hóa và giải mã một giá trị văn bản đơn lẻ bằng các hàm encodeURIComponent/decodeURIComponent của JavaScript, tuân theo tập ký tự không dành riêng của RFC 3986; nó không phân tích hay kiểm tra hợp lệ cấu trúc của một URL hoàn chỉnh (scheme, host, path, query) như các thành phần riêng biệt.
Sources: RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
Quyền riêng tư và an toàn
- Tính toán trong trình duyệt — Dữ liệu bạn nhập chỉ được tính trên thiết bị của bạn và không gửi tới máy chủ utilduck.
- Kết nối được mã hóa — Mọi trang đều dùng HTTPS nên không ai trên đường truyền đọc được nội dung.
- Không chia sẻ với bên thứ ba — Dữ liệu bạn nhập không được chuyển cho dịch vụ phân tích hay quảng cáo.
- Không lưu trữ — Kết quả không được lưu trên máy chủ nào và bạn không cần tạo tài khoản.
Cập nhật lần cuối: 2026-08-17