Khi bạn làm việc với URL, API, hay bất kỳ hệ thống web nào, chắc hẳn Đây là cơ chế mã hóa các ký tự đặc biệt trong URL thành dạng phần trăm (%) theo sau là hai chữ số hexa, giúp dữ liệu truyền tải an toàn trên Internet mà không bị hiểu sai lệch. Bài viết này sẽ giải thích chi tiết từ khái niệm cơ bản, nguyên lý hoạt động, bảng mã chuẩn, ứng dụng thực tế đến các lỗi thường gặp và cách khắc phục. Mọi thông tin được trình bày rõ ràng, có ví dụ cụ thể, phù hợp cho cả người mới bắt đầu lẫn lập trình viên muốn hiểu sâu.
Percent Encoding – Bản Chất và Nguyên Lý Hoạt Động

Percent Encoding là gì? Định nghĩa chính xác
Percent encoding (hay URL encoding) là phương pháp mã hóa các ký tự không an toàn trong URL thành dạng %xx, trong đó xx là mã hexa của ký tự đó trong bảng ASCII. Mục đích chính là đảm bảo URL chỉ chứa các ký tự được phép theo chuẩn RFC 3986, tránh xung đột với cú pháp URL. Ví dụ: khoảng trắng (mã ASCII 32, hex 20) được mã hóa thành %20.
Quy tắc này do Tim Berners-Lee đề xuất vào đầu những năm 1990 và nhanh chóng trở thành chuẩn của World Wide Web. Ngày nay, mọi trình duyệt, máy chủ web, và thư viện lập trình đều hỗ trợ percent encoding một cách mặc định.
Cách thức hoạt động của Percent Encoding
Khi bạn gửi một yêu cầu HTTP, trình duyệt hoặc ứng dụng sẽ tự động áp dụng percent encoding lên phần query string hoặc path của URL. Quá trình diễn ra như sau:
- Xác định ký tự nào cần mã hóa: bao gồm ký tự không phải chữ cái Latin, chữ số, và một số ký tự đặc biệt cho phép (dấu gạch ngang -, dấu gạch dưới _, dấu chấm., dấu ngã ~).
- Chuyển ký tự đó thành giá trị byte theo bảng mã UTF-8 (hoặc ASCII nếu ký tự trong phạm vi 0-127).
- Biểu diễn mỗi byte dưới dạng %hex, với hex là hai chữ số thập lục phân viết hoa.
Ví dụ: Ký tự @ có mã ASCII 64, hex 40 → mã hóa thành %40. Ký tự ℹ (info) có 2 byte UTF-8: E2 84 B9 → mã hóa thành %E2%84%B9.
Bảng Ký Tự Cần Mã Hóa trong Percent Encoding
Phân loại ký tự trong URL
Không phải ký tự nào cũng cần mã hóa. Dựa vào chuẩn RFC 3986, chúng ta có ba nhóm chính:
| Nhóm | Ký tự | Mô tả |
|---|---|---|
| Không mã hóa | A–Z, a–z, 0–9, -, _,., ~ | Ký tự an toàn, luôn được giữ nguyên |
| Ký tự dành riêng | :, /,?, #, [, ], @,!, $, &, ‘, (, ), *, +,,,;, = | Mỗi ký tự có ý nghĩa cú pháp trong URL. Khi là một phần của dữ liệu, chúng phải được mã hóa |
| Ký tự khác | Khoảng trắng, dấu nháy, ký tự Unicode, ký tự điều khiển (< 0x20) | Bắt buộc mã hóa |
Bảng mã percent encoding phổ biến
Tuy nhiên, percent encoding là tên kỹ thuật (dùng %), còn URL encoding là ứng dụng của nó trong URL. Trong thực tế, có trường hợp form url encoding sử dụng dấu + thay cho %20 để biểu diễn khoảng trắng, nhưng bản chất vẫn là percent encoding với ngoại lệ nhỏ cho application/x-www-form-urlencoded.
Percent Encoding vs Base64 Encoding
| Đặc điểm | Percent Encoding | Base64 Encoding |
|---|---|---|
| Mục đích | Mã hóa URL để truyền an toàn | Mã hóa dữ liệu nhị phân thành text |
| Ký tự đầu ra | Chữ, số, %, + (có thể) | A–Z, a–z, 0–9, +, /, = |
| Tỉ lệ nén | Kích thước tăng lên (1 byte → 3 byte nếu UTF-8) | Tăng 33% dung lượng |
| Ứng dụng | URL, query string, cookie | Email, JSON, token |
Lợi Ích và Hạn Chế của Percent Encoding

Lợi ích của Percent Encoding
- Đảm bảo tính toàn vẹn dữ liệu: URL không bị hỏng khi chứa ký tự đặc biệt như &,?, #.
- Hỗ trợ mọi ngôn ngữ: Ký tự Unicode (tiếng Việt, tiếng Nhật,…) được mã hóa và giải mã đúng.
- Tương thích ngược: Là chuẩn từ thời đầu web, mọi thiết bị và trình duyệt đều hiểu.
- Bảo mật cơ bản: Giảm nguy cơ injection qua URL (SQL injection, XSS) nếu kết hợp với server-side validation.
Hạn chế của Percent Encoding
- Tăng kích thước URL: Một ký tự có thể thành %xx, làm URL dài hơn.
- Giảm khả năng đọc: Người dùng khó đọc trực tiếp URL đã mã hóa.
- Phụ thuộc vào bảng mã: Nếu không dùng UTF-8, giải mã có thể sai nếu bên gửi và nhận dùng bảng mã khác nhau.
- Không thể hiện ngữ nghĩa: Dữ liệu mã hóa mất đi ý nghĩa trực quan, cần decode để xử lý.
Ứng Dụng Thực Tế của Percent Encoding
1. Trong URL và Query String
Khi người dùng tìm kiếm trên Google với từ khóa “cà phê sữa”, trình duyệt sẽ tạo URL: https://www.google.com/search?q=c%C3%A0+ph%C3%AA+s%E1%BB%AFa. Ở đây:
%C3%A0 là mã hexa của chữ “à” (U+00E0 trong UTF-8).%20 là khoảng trắng.%E1%BB%AF là chữ “ữ” (U+1EEF).
2. Trong API và RESTful Services
Các API thường yêu cầu percent encoding cho tham số. Ví dụ gửi email: ?email=user%40domain.com thay vì @ trực tiếp. Nếu không mã hóa, @ sẽ làm router phân tích sai hostname.
3. Trong File Path và Upload
Khi upload file có tên tiếng Việt lên server, trình duyệt tự động encode tên file trong Content-Disposition. Server decode để lưu đúng tên gốc.
4. Trong Cookie và Session
Cookie value chứa dấu chấm phẩy, dấu bằng cũng phải được percent encoding để tránh phá vỡ cú pháp header Set-Cookie.
Hướng Dẫn Thực Hành: Mã Hóa và Giải Mã Percent Encoding

Cách thủ công (dành cho người mới)
làm hỏng cấu trúc. Chỉ nên encode từng phần (query string, path parameter) riêng lẻ.
Sai Lầm Thường Gặp và Cách Tránh
Hướng Dẫn Khắc Phục Lỗi Liên Quan Đến Percent Encoding

Lỗi 400 Bad Request: Thường do URL chứa ký tự không hợp lệ. Kiểm tra query string, đặc biệt các ký tự như &, =, #. Sử dụng hàm encode cho từng tham số.
Lỗi hiển thị ký tự lạ: Ví dụ hiện “cà phê” thay vì “cà phê”. Nguyên nhân: dữ liệu được giải mã bằng bảng mã sai (thường là Latin-1). Sửa bằng cách ép server dùng UTF-8, hoặc thêm meta charset=”UTF-8″ trong HTML.
Lỗi khi gửi dữ liệu form: Nếu không dùng enctype=”application/x-www-form-urlencoded” thì trình duyệt không tự động encode. Cần kiểm tra thuộc tính form hoặc encode thủ công bằng JavaScript.
Lưu Ý Quan Trọng Khi Làm Việc Với Percent Encoding
- Chuẩn HTTP/1.1 khuyến cáo không dùng ký tự không được encode trong request line. Luôn encode nội dung do người dùng nhập.
- Percent encoding không phải là biện pháp bảo mật (như mã hóa dữ liệu). Nó chỉ chuyển đổi định dạng. Dữ liệu vẫn có thể đọc được sau khi decode.
- Các framework web hiện đại (Django, Spring, Express) thường tự động decode request parameters. Tuy nhiên, nếu bạn tự xây dựng HTTP client, cần đảm bảo encode đúng cách.
- Trong URL path, ký tự % có thể được dùng như một phần của percent encoding, nhưng nếu bạn muốn truyền % thật, phải encode thành %25.
FAQ – Câu Hỏi Thường Gặp Về Percent Encoding
Percent encoding khác gì với URL encoding?
Không khác biệt về mặt kỹ thuật. Percent encoding là tên gọi của cơ chế (dùng %), URL encoding là tên gọi trong ngữ cảnh URL. Một số tài liệu gọi là “URL encoding” nhưng thực chất là percent encoding.
Tại sao khoảng trắng đôi khi là %20, đôi khi là dấu +?
Trong application/x-www-form-urlencoded (dữ liệu form), khoảng trắng được encode thành dấu + để tiết kiệm ký tự. Trong URL thông thường, khoảng trắng luôn là %20. Các trình duyệt hiện đại chuyển + thành %20 khi gửi GET request, nhưng server vẫn có thể xử lý cả hai.
Làm thế nào để decode percent encoding trong JavaScript?
Sử dụng hàm decodeURIComponent(encodedString). Ví dụ: decodeURIComponent('%C3%A0') trả về “à”. Lưu ý không dùng decodeURI() cho string đã encode component.
Có cần encode dấu gạch chéo / trong URL path không?
Không nếu / là phần cú pháp của path. Nếu dữ liệu của bạn chứa dấu /, ví dụ một tham số đường dẫn, bạn cần encode thành %2F để không bị nhầm là phân cách path.
Percent encoding có hỗ trợ Unicode không?
Có. Unicode được encode thành nhiều byte UTF-8, mỗi byte mã hóa thành %hex. Ví dụ: “€” (U+20AC) thành %E2%82%AC. Hệ thống giải mã dựa vào UTF-8 để lấy đúng ký tự.
Làm sao biết một URL đã bị double encode?
Dấu hiệu: nhìn thấy %2520 thay vì %20. Giải mã một lần ra %20, giải mã lần hai ra khoảng trắng. Có thể kiểm tra bằng cách decode từng bước và kiểm tra output có còn % không.
Kết Luận
Percent encoding là kỹ thuật nền tảng của World Wide Web, đảm bảo mọi ký tự từ khắp nơi trên thế giới có thể truyền tải qua URL một cách an toàn và chính xác. Hiểu rõ percent encoding là gì, cách nó hoạt động, và biết cách sử dụng đúng ngữ cảnh sẽ giúp bạn tránh được nhiều lỗi khi phát triển web, tích hợp API, và xử lý dữ liệu. Dù đã ra đời hơn 30 năm, kỹ thuật này vẫn là chuẩn mực không thể thay thế trong bất kỳ hệ thống internet nào. Hãy luôn nhớ encode dữ liệu đầu vào của người dùng, decode khi cần lấy giá trị gốc, và kiểm tra kỹ bảng mã để tránh sai sót. Áp dụng đúng percent encoding, bạn sẽ có một nền tảng web vững chắc, ít lỗi và thân thiện với người dùng.
- WordPress Media Sau Đổi Domain Bị Lỗi: Nguyên Nhân Và Cách Khắc Phục Toàn Diện
- WordPress Frontend Server Error: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Hoàn Toàn
- WordPress Litespeed Object Cache Lỗi: Nguyên Nhân, Cách Khắc Phục Chi Tiết Từ A Đến Z
- Hướng Dẫn Chi Tiết Cách Tạo Sticky Header Elementor Chuyên Nghiệp
- Cách Khắc Phục Lỗi WordPress Google Workspace Authentication Error Nhanh Chóng
















