Trả lời nhanh
Mã hoá URL (percent-encoding, RFC 3986) đổi mỗi ký tự không an toàn thành các byte UTF-8 dạng %XX: dấu cách thành %20, “à” thành %C3%A0, nên “Hà Nội” thành H%C3%A0%20N%E1%BB%99i. Dùng “Một phần URL” (encodeURIComponent) cho giá trị tham số, “Cả đường dẫn” (encodeURI) khi cần giữ nguyên / ? & #.
Mã hoá URL là gì?
Công cụ mã hoá và giải mã URL có tiếng Việt theo chuẩn UTF-8, chỉ đúng vị trí chuỗi % bị hỏng thay vì chỉ báo “URI malformed”, tách một URL dài thành bảng giao thức, tên miền, đường dẫn, từng tham số query đã giải mã để bạn sửa rồi ghép lại, và đổi tên miền tiếng Việt sang dạng Punycode (xn--…) dùng khi khai báo DNS. Mọi xử lý chạy trên trình duyệt.

Cách mã hoá và giải mã URL
- 1
Tab “Mã hoá / giải mã”: chọn “Mã hoá” hoặc “Giải mã”, rồi gõ hoặc dán nội dung; kết quả hiện ngay ở ô bên cạnh.
- 2
Khi mã hoá, chọn “Một phần URL” cho giá trị tham số, đoạn đường dẫn, hoặc “Cả đường dẫn” khi đã có URL hoàn chỉnh. Khi giải mã dữ liệu form, bật “Coi dấu + là dấu cách”.
- 3
Tab “Phân tích URL”: dán URL để xem từng thành phần; sửa, thêm hoặc xoá tham số rồi sao chép “URL sau khi sửa”.
- 4
Tab “Tên miền tiếng Việt”: nhập tên miền có dấu (hoặc dạng xn--) để có cả hai dạng ASCII và Unicode.
encodeURIComponent và encodeURI khác nhau ở đâu
| Ký tự | Một phần URL (encodeURIComponent) | Cả đường dẫn (encodeURI) | Vì sao |
|---|---|---|---|
| Dấu cách | %20 | %20 | Không được có dấu cách trong URL |
| à, ộ, đ (chữ có dấu) | %C3%A0, %E1%BB%99, %C4%91 | Như bên trái | Mỗi chữ có dấu là 2–3 byte UTF-8 |
| / ? # @ | %2F %3F %23 %40 | Giữ nguyên | Ký tự phân tách cấu trúc URL (gen-delims); riêng [ ] vẫn bị mã hoá thành %5B %5D |
| & = + $ , ; : | %26 %3D %2B %24 %2C %3B %3A | Giữ nguyên | Ký tự phân tách phụ (sub-delims) |
| A–Z a–z 0–9 - _ . ! ~ * ' ( ) | Giữ nguyên | Giữ nguyên | Ký tự không cần mã hoá |
Vuốt ngang để xem cả bảng →
Mã hoá cả URL bằng encodeURIComponent sẽ biến https:// thành https%3A%2F%2F và URL không còn mở được.
Các thành phần của một URL
Ví dụ: https://user:pass@tênmiền.vn:8443/tin-tức/a?q=Hà+Nội&page=2#mục-1
| Thành phần | Giá trị trong ví dụ | Ghi chú |
|---|---|---|
| Giao thức (scheme) | https | Kết thúc bằng “:” |
| Thông tin đăng nhập | user:pass | Hiếm dùng, trình duyệt thường cảnh báo |
| Tên miền (host) | xn--tnmin-hsa0954c.vn | Tên miền có dấu được đổi sang Punycode |
| Cổng (port) | 8443 | Bỏ trống thì dùng 443 (https) hoặc 80 (http) |
| Đường dẫn (path) | /tin-tức/a | Gửi đi dưới dạng /tin-t%E1%BB%A9c/a |
| Tham số (query) | q = Hà Nội, page = 2 | Dấu + trong query nghĩa là dấu cách |
| Neo (fragment) | mục-1 | Không gửi lên máy chủ, chỉ trình duyệt dùng |
Ví dụ thực tế
Gắn từ khoá tiếng Việt vào link tìm kiếm
Cần link https://example.com/search?q=giày thể thao: mã hoá riêng “giày thể thao” bằng “Một phần URL” được gi%C3%A0y%20th%E1%BB%83%20thao rồi ghép sau q=. Nếu từ khoá có dấu & (ví dụ “Bút & sổ”), bắt buộc mã hoá thành %26, không thì phần sau bị hiểu là tham số mới.
Đọc link UTM dài trong báo cáo
Link quảng cáo dạng ?utm_source=zalo&utm_campaign=Khuy%E1%BA%BFn%20m%C3%A3i… khó đọc: dán vào “Phân tích URL” để thấy bảng tham số đã giải mã, sửa utm_campaign rồi sao chép URL mới.
Khai báo tên miền tiếng Việt
Mua tên miền “tênmiền.vn” nhưng nhà cung cấp DNS hay chứng chỉ SSL chỉ nhận chữ không dấu: tab “Tên miền tiếng Việt” cho dạng xn--tnmin-hsa0954c.vn để khai báo.
Sửa lỗi “URI malformed”
Giải mã chuỗi “giảm%giá” báo lỗi ở vị trí 5: dấu % không có 2 chữ số hex phía sau. Nếu đó là dấu phần trăm thật, chuỗi đúng phải là gi%E1%BA%A3m%25gi%C3%A1.
Lỗi thường gặp và cách xử lý
- Mã hoá cả URL xong link không mở được.
- Bạn đã dùng “Một phần URL” cho cả đường dẫn nên :// và / bị mã hoá. Chọn “Cả đường dẫn”, hoặc chỉ mã hoá phần giá trị tham số.
- Giải mã xong vẫn còn %20 hoặc %25.
- Chuỗi bị mã hoá hai lần (%2520 = %20 bị mã hoá lại). Bấm “Đổi chiều” rồi giải mã thêm một lượt.
- Dấu + biến thành dấu cách (hoặc ngược lại).
- Trong dữ liệu form và query string, + nghĩa là dấu cách. Ở phần đường dẫn thì + là chính nó. Bật hoặc tắt “Coi dấu + là dấu cách” cho đúng nguồn dữ liệu.
- Giải mã ra ký tự lạ kiểu “Ã ”.
- Chuỗi được mã hoá bằng bảng mã cũ (Windows-1252, TCVN3) hoặc đã bị giải mã sai một lần. Công cụ dùng UTF-8, chuẩn của mọi trình duyệt hiện nay.
- Báo “không phải ký tự UTF-8 hợp lệ”.
- Chuỗi %XX bị cắt giữa chừng (ví dụ %E1%BB thiếu byte cuối). Sao chép lại đầy đủ link gốc.
Vì sao URL phải mã hoá
URL chỉ được chứa một tập ký tự ASCII giới hạn. Chữ có dấu, dấu cách, dấu ngoặc kép và các ký tự mang nghĩa cấu trúc như & ? # phải được đổi thành %XX, trong đó XX là giá trị hex của từng byte UTF-8. Thanh địa chỉ của trình duyệt hiển thị lại chữ có dấu cho dễ đọc, nhưng thứ thực sự gửi đi là dạng đã mã hoá.
Mã hoá đúng chỗ giúp tham số không bị cắt: giá trị “Bút & sổ” chưa mã hoá sẽ thành tham số “Bút ” và một tham số rỗng tên “ sổ”.
Punycode và tên miền tiếng Việt
Hệ thống tên miền chỉ chấp nhận chữ cái Latin không dấu, số và gạch nối. Tên miền có dấu (IDN) được đổi sang Punycode theo RFC 3492: mỗi nhãn có dấu thành dạng xn--…, ví dụ việtnam.vn thành xn--vitnam-jk8b.vn. Trình duyệt tự đổi qua lại; bạn chỉ cần dạng xn-- khi khai báo DNS, cấu hình máy chủ web hay xin chứng chỉ SSL.
Thuật ngữ
- Percent-encoding
- Cách viết một byte thành %XX (hai chữ số hex), quy định ở RFC 3986.
- Query string
- Phần sau dấu ? của URL, gồm các cặp tên=giá trị nối bằng &.
- Fragment
- Phần sau dấu #, chỉ trình duyệt dùng để cuộn tới vị trí trong trang.
- IDN
- Internationalized Domain Name: tên miền có ký tự ngoài bảng chữ Latin không dấu.
- Punycode
- Cách viết chuỗi Unicode bằng ký tự ASCII cho tên miền, có tiền tố xn--.
- UTF-8
- Bảng mã dùng 1–4 byte cho mỗi ký tự; chữ tiếng Việt có dấu thường là 2–3 byte.
Câu hỏi thường gặp
Nên dùng encodeURIComponent hay encodeURI?
Dùng encodeURIComponent (“Một phần URL”) cho từng giá trị bạn ghép vào URL: tham số, đoạn đường dẫn. Chỉ dùng encodeURI (“Cả đường dẫn”) khi đã có URL hoàn chỉnh và chỉ muốn thay dấu cách, chữ có dấu.
Vì sao “Hà Nội” lại dài thành H%C3%A0%20N%E1%BB%99i?
Mỗi chữ có dấu chiếm 2–3 byte UTF-8 và mỗi byte viết thành 3 ký tự %XX, nên chữ “ộ” thành %E1%BB%99. Dấu cách là %20.
Dấu + trong URL có nghĩa là gì?
Trong query string theo kiểu form HTML, + nghĩa là dấu cách. Ở phần đường dẫn, + là ký tự +. Muốn chắc chắn là dấu + thật, mã hoá thành %2B.
Công cụ có gửi URL của tôi đi đâu không?
Không. Mã hoá, giải mã, phân tích và đổi Punycode đều chạy bằng JavaScript trên trình duyệt, kể cả URL có token hay thông tin đăng nhập.
Mã hoá URL có phải là mã hoá bảo mật không?
Không. Đây chỉ là cách viết lại ký tự cho hợp lệ, ai cũng giải mã được. Đừng dùng nó để giấu mật khẩu hay dữ liệu nhạy cảm.
Phân tích URL có giữ thứ tự và tham số trùng tên không?
Có. Các tham số giữ đúng thứ tự, tham số trùng tên (ví dụ page=2&page=3) hiện thành nhiều dòng; dòng có tên trống bị bỏ khi ghép lại.
Đánh giá và bình luận
Đang tải…