Công Cụ Nhanh

Mã hoá, giải mã URL online

Chiều chuyển đổi
Kiểu mã hoá

encodeURIComponent: mã hoá cả / ? & = # … Dùng cho giá trị tham số, đoạn đường dẫn.

Xử lý ngay trên trình duyệt của bạn. Tệp và dữ liệu không được tải lên máy chủ.

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.

Minh hoạ dải giấy ghi địa chỉ web đi qua hai trục lăn, ra phía bên kia thành chuỗi ô vuông nhỏ, cạnh đó là một mắt xích

Cách mã hoá và giải mã URL

  1. 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. 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. 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. 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%20Không được có dấu cách trong URL
à, ộ, đ (chữ có dấu)%C3%A0, %E1%BB%99, %C4%91Như bên tráiMỗi chữ có dấu là 2–3 byte UTF-8
/ ? # @%2F %3F %23 %40Giữ nguyênKý 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 %3AGiữ nguyênKý tự phân tách phụ (sub-delims)
A–Z a–z 0–9 - _ . ! ~ * ' ( )Giữ nguyênGiữ nguyênKý 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ầnGiá trị trong ví dụGhi chú
Giao thức (scheme)httpsKết thúc bằng “:”
Thông tin đăng nhậpuser:passHiếm dùng, trình duyệt thường cảnh báo
Tên miền (host)xn--tnmin-hsa0954c.vnTên miền có dấu được đổi sang Punycode
Cổng (port)8443Bỏ trống thì dùng 443 (https) hoặc 80 (http)
Đường dẫn (path)/tin-tức/aGửi đi dưới dạng /tin-t%E1%BB%A9c/a
Tham số (query)q = Hà Nội, page = 2Dấu + trong query nghĩa là dấu cách
Neo (fragment)mục-1Khô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…