Cách dùng Mã hóa / Giải mã URL
- Chọn chế độ: Mã hóa thành phần cho một giá trị truy vấn hoặc đoạn đường dẫn, Mã hóa toàn bộ URL cho một địa chỉ hoàn chỉnh, hoặc Giải mã.
- Nhập hoặc dán nội dung vào ô bên trái. Kết quả sẽ tự cập nhật khi bạn gõ.
- Dùng Dấu cách thành + nếu bạn cần mã hóa kiểu form HTML, hoặc Từng dòng riêng biệt để xử lý một danh sách.
- Dán URL bất kỳ vào Bộ phân tích URL để xem host, đường dẫn và bảng giải mã các tham số truy vấn.
URL encoding là gì?
URL encoding, hay chính thức là percent-encoding (RFC 3986), thay thế các ký tự không được phép hoặc có ý nghĩa đặc biệt trong URL bằng % theo sau là hai chữ số thập lục phân. Dấu cách trở thành %20, & trở thành %26, còn các ký tự không thuộc ASCII trước tiên được chuyển thành byte UTF-8 rồi mã hóa từng byte: é → %C3%A9, € → %E2%82%AC. Nếu không mã hóa, một giá trị như Tom & Jerry trong chuỗi truy vấn sẽ bị tách thành hai tham số.
encodeURIComponent và encodeURI khác nhau thế nào?
JavaScript có hai hàm này, và chọn nhầm là lỗi rất phổ biến:
| Ký tự | encodeURIComponent | encodeURI |
|---|---|---|
| Dấu cách | %20 | %20 |
/ ? # & = : @ + , ; $ | Được mã hóa | Giữ nguyên |
A–Z a–z 0–9 - _ . ! ~ * ' ( ) | Giữ nguyên | Giữ nguyên |
é, emoji, các ký tự khác ngoài ASCII | Mã hóa percent UTF-8 | Mã hóa percent UTF-8 |
Dùng encodeURIComponent (“Mã hóa thành phần”) cho mọi thứ bạn chèn vào một URL, như giá trị tham số truy vấn, đoạn đường dẫn, hay URL chuyển hướng được truyền làm tham số. Chỉ dùng encodeURI (“Mã hóa toàn bộ URL”) cho một URL hoàn chỉnh chỉ có dấu cách hoặc ký tự không thuộc ASCII, vì nó giữ nguyên các ký tự cấu trúc : / ? # &.
%20 hay +?
Trong phần đường dẫn của URL, dấu cách phải là %20. Trong chuỗi truy vấn được gửi từ form HTML (application/x-www-form-urlencoded), dấu cách được viết là +. Hầu hết máy chủ chấp nhận cả hai trong chuỗi truy vấn, nhưng khi cần gửi dấu cộng thật thì phải viết là %2B. Bộ giải mã mặc định coi + là dấu cách; hãy bỏ chọn tùy chọn nếu dữ liệu của bạn có dấu cộng thật.
Lỗi khi giải mã
Dấu % phải được theo sau bởi đúng hai chữ số thập lục phân, và ký tự UTF-8 nhiều byte cần đủ tất cả các byte của nó. Hàm decodeURIComponent() thông thường sẽ ném lỗi URIError: malformed URI sequence ngay khi gặp chuỗi sai đầu tiên. Công cụ này giải mã mọi phần hợp lệ, giữ nguyên các phần lỗi và cho bạn biết những phần nào bị lỗi. Chuỗi bị mã hóa hai lần (%2520) sau một lần giải mã sẽ thành %20, bạn cần giải mã thêm lần nữa để có dấu cách.
Cấu trúc của một URL
https://user@shop.example.com:8443/search?q=shoes#results gồm có scheme (https:), thông tin đăng nhập (nếu có), host, cổng, đường dẫn, chuỗi truy vấn và fragment. Bộ phân tích ở trên dùng API URL chuẩn của trình duyệt (WHATWG URL Standard), cũng chính là API được fetch() sử dụng. Đang tạo link chiến dịch? Hãy thử UTM Builder. Cần mã hóa dữ liệu nhị phân? Hãy dùng Base64.
Cũng được tìm dưới tên: mã hóa url, giải mã url, percent encoding, url encode online, urldecode online, encodeuricomponent, phân tích url, escape ký tự url.
Các công cụ dùng kèm tốt với Mã hóa / Giải mã URL
- Mã hóa HTML Entity — Escape < > & " để văn bản hiển thị an toàn trong HTML, chuyển dấu và ký hiệu sang entity dạng tên hoặc số, hoặc giải mã HTML chứa entity về văn bản thuần.
- Tạo slug URL — Chuyển mọi tiêu đề thành slug URL gọn gàng, viết thường, với cách bỏ dấu, chuyển ä/ö/ü và chữ Cyrillic chính xác.
- Giải mã JWT — Dán JSON Web Token vào đây để xem header và payload, kiểm tra thời điểm hết hạn và xác minh chữ ký.
- Dịch Mã Morse — Nhập văn bản để có mã Morse, hoặc dán chấm và gạch để giải mã.
Câu hỏi thường gặp
Khi nào nên dùng encodeURIComponent thay vì encodeURI?
/ ? & # = mà không mã hóa.Vì sao dấu cách đôi khi là %20, đôi khi là +?
%20 là cách mã hóa theo RFC 3986, hợp lệ ở mọi vị trí trong URL. Còn + chỉ có nghĩa là dấu cách trong chuỗi truy vấn kiểu form (application/x-www-form-urlencoded), loại dữ liệu mà form HTML gửi đi.“URIError: malformed URI sequence” có nghĩa là gì?
% không đi kèm hai chữ số thập lục phân, hoặc có chuỗi byte UTF-8 chưa đầy đủ. Bộ giải mã này sẽ giữ nguyên các phần đó và liệt kê chúng ra, thay vì báo lỗi và dừng lại.Những ký tự nào không bao giờ cần mã hóa?
A–Z a–z, chữ số 0–9 và - _ . ~. Mọi ký tự khác hoặc được dành riêng cho cú pháp URL, hoặc phải được mã hóa percent.