Mã hóa một truy vấn tìm kiếm
hello world & more
hello%20world%20%26%20more
Dấu cách thành %20, còn & thành %26 để không bị nhầm là dấu phân tách tham số query.
Mã hóa và giải mã thành phần URL an toàn.
Cập nhật lần cuối
Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.
URL encoder (còn gọi là công cụ mã hóa phần trăm hay URI encoder) thay các ký tự dành riêng hoặc không an toàn trong URL bằng % kèm hai chữ số hex. Lập trình viên dùng nó khi tạo query string, escape một đoạn path, chia sẻ URL có dấu cách hoặc ký tự ngoài ASCII, và khi gỡ lỗi redirect.
URL chỉ được chứa một tập nhỏ ký tự ASCII. Mọi thứ nằm ngoài tập đó, như dấu cách, chữ có dấu, emoji, hay các ký hiệu dành riêng như ?, #, &, = khi chúng là dữ liệu, đều phải được mã hóa phần trăm để đi nguyên vẹn từ trình duyệt đến máy chủ.
JavaScript có hai hàm mã hóa: encodeURI (giữ nguyên cấu trúc URL: /, ?, #, &) và encodeURIComponent (mã hóa mọi ký tự dành riêng). Dùng encodeURIComponent cho các *giá trị* bạn đưa vào query string, và encodeURI cho *cả URL* mà bạn vẫn muốn hoạt động bình thường.
% cộng hai chữ số hex. Ví dụ, dấu cách thành %20.: / ? # & = +) có ý nghĩa trong cấu trúc URL. Khi dùng chúng làm dữ liệu chứ không phải dấu phân tách, bạn phải mã hóa chúng.encodeURI giữ nguyên cấu trúc URL; encodeURIComponent mã hóa mọi ký tự dành riêng. Hãy dùng đúng hàm cho đúng vị trí.Chọn Encode nếu bạn có văn bản gốc và muốn nó an toàn trong URL. Chọn Decode nếu bạn có chuỗi đã mã hóa bằng % và muốn lấy lại văn bản gốc.
Chọn encodeURIComponent (mã hóa mọi ký tự dành riêng) cho giá trị trong query string; chọn encodeURI (giữ cấu trúc) cho cả URL.
Dán văn bản gốc hoặc URL đã mã hóa. Bạn có thể dán nhiều dòng để decode cùng lúc.
Sao chép giá trị đã encode hoặc decode. Việc chuyển đổi chạy ngay trong trình duyệt, nên dữ liệu bí mật trong URL không rời khỏi máy của bạn.
Những ký tự bạn hay thấy bị mã hóa nhất, kèm dạng mã hóa phần trăm của chúng. Ý nghĩa của các ký tự dành riêng lấy từ RFC 3986.
| Ký tự | Đã mã hóa | Lý do |
|---|---|---|
| dấu cách | %20 | URL không được chứa dấu cách |
! | %21 | Một số máy chủ dành riêng ký tự này |
# | %23 | Đánh dấu đầu fragment |
$ | %24 | Ký tự dành riêng |
& | %26 | Phân tách các tham số query |
+ | %2B | Có nghĩa là dấu cách trong body dạng form |
/ | %2F | Dấu phân tách path |
: | %3A | Phân tách scheme và host |
= | %3D | Phân tách khóa và giá trị trong query string |
? | %3F | Đánh dấu đầu query string |
@ | %40 | Phân tách userinfo và host |
| byte UTF-8 | %C3%A9 | Mỗi byte ngoài ASCII đều được mã hóa |
hello world & more
hello%20world%20%26%20more
Dấu cách thành %20, còn & thành %26 để không bị nhầm là dấu phân tách tham số query.
café
caf%C3%A9
é là chuỗi byte UTF-8 0xC3 0xA9, nên dạng mã hóa có *hai* nhóm %XX cho một ký tự đó.
https://example.com/path?q=hello world
https://example.com/path?q=hello%20world
https%3A%2F%2Fexample.com%2Fpath%3Fq%3Dhello%20world
encodeURI giữ nguyên cấu trúc URL (dấu gạch chéo, ?, =). encodeURIComponent mã hóa mọi ký tự dành riêng: dùng nó cho các giá trị bạn đặt trong query string, không bao giờ cho cả URL.
encodeURI cho giá trị trong query string. & và = không bị mã hóa và làm hỏng việc đọc tham số.%2520 thay vì %20 là dấu hiệu kinh điển của bug mã hóa hai lần.+ nghĩa là dấu cách trong body application/x-www-form-urlencoded, nhưng lại là chính ký tự + trong path hoặc query của URL.decodeURIComponent nhận mọi chuỗi. Hàm này ném lỗi khi gặp ký tự % đứng một mình mà không có hai chữ số hex theo sau.% kèm hai chữ số hex.encodeURI giữ nguyên các ký tự cấu trúc URL (/, ?, #, &, =, +). encodeURIComponent mã hóa tất cả chúng, đúng thứ bạn cần cho từng *giá trị* riêng lẻ đặt trong URL: giá trị tham số query, đoạn path, fragment. Xem tài liệu MDN về encodeURI và encodeURIComponent.%20?%20, tức dạng mã hóa phần trăm của ký tự dấu cách ASCII (0x20 trong hệ hex).Mã hóa mọi giá trị do người dùng nhập hoặc giá trị động trước khi đưa vào URL: giá trị query string, đoạn path, đích redirect, tham số OAuth. Đừng bao giờ tin rằng đầu vào thô đã an toàn cho URL.
decodeURI, decodeURIComponent hoặc bất kỳ URL decoder nào cũng chuyển dạng mã hóa phần trăm về lại ký tự gốc.