Mã hóa, giải mã và phân tích URL

Mã hóa, giải mã, phân tích URL và sửa chuỗi truy vấn.

Mã hóa mọi thứ trừ chữ, số và - _ . ! ~ * ' ( ). Dùng cho một giá trị riêng lẻ (encodeURIComponent).

Công cụ này làm gì

URL chỉ chứa được một tập ký tự đơn giản. Mọi thứ khác, như dấu cách, chữ có dấu, emoji hay ký tự có nghĩa trong cú pháp URL, được viết bằng dấu phần trăm và hai chữ số hex cho mỗi byte: dấu cách là %20, "é" là %C3%A9. Công cụ có ba thẻ. Mã hóa đổi văn bản sang dạng đó, Giải mã đổi ngược lại và chỉ rõ chuỗi nào bị hỏng, còn Phân tích URL tách địa chỉ thành giao thức, người dùng, máy chủ, cổng, đường dẫn, truy vấn và đoạn, liệt kê các tham số trong một trình sửa nhỏ và ghép lại URL khi bạn thay đổi.

Ba kiểu mã hóa

Cùng một văn bản có thể mã hóa theo ba cách, và chọn sai là lỗi phổ biến nhất.

  • Thành phần (encodeURIComponent) mã hóa mọi thứ trừ chữ, số và - _ . ! ~ * ' ( ). Dùng cho một giá trị nằm trong URL, như từ khóa tìm kiếm. a/b?c=d&e thành a%2Fb%3Fc%3Dd%26e.
  • Cả URL (encodeURI) giữ nguyên cả ; , / ? : @ & = + $ #, nên địa chỉ hoàn chỉnh không đổi cấu trúc: cùng văn bản đó vẫn là a/b?c=d&e. Dùng cho một giá trị riêng lẻ là sai, vì & hay = bên trong sẽ bị hiểu là cú pháp.
  • Biểu mẫu là kiểu form HTML và URLSearchParams ghi: dấu cách thành +, và ~ ! ' ( ) cũng bị mã hóa. "café au lait & crème" là caf%C3%A9+au+lait+%26+cr%C3%A8me ở kiểu biểu mẫu.

Cả ba làm việc trên byte UTF-8, nên emoji (một cặp surrogate trong JavaScript) thành bốn byte: 😀 là %F0%9F%98%80. Nửa cặp surrogate lẻ không có dạng UTF-8, nên hàm gốc của JavaScript báo "URI malformed"; công cụ này báo vị trí cụ thể.

Giải mã và các lỗi có thể gặp

Giải mã đảo ngược từng chuỗi. Dấu + chỉ là dấu cách ở kiểu biểu mẫu, còn %2B luôn là dấu cộng. Có hai kiểu lỗi: dấu % không theo sau bởi hai chữ số hex (100%, %zz), và các chuỗi không tạo thành UTF-8 hợp lệ, như %C3%28. Công cụ nêu tên từng lỗi kèm vị trí và giữ nguyên phần không giải mã được để bạn thấy nó nằm đâu. Bật "Dừng ở lỗi đầu tiên" nếu muốn không có kết quả khi có lỗi. Nếu kết quả vẫn còn chuỗi %, ví dụ %2520 thành %20, nhiều khả năng nó bị mã hóa hai lần và có nút giải mã lại.

Tách một URL

Bộ phân tích trước hết tách địa chỉ đúng như bạn viết theo RFC 3986, rồi so từng phần với kết quả của trình phân tích URL trong trình duyệt và hiển thị khác biệt bên dưới: cổng mặc định 443 bị bỏ, ./ trong đường dẫn được giải quyết, và tên miền như münchen.de được viết thành xn--mnchen-3ya.de. Truy vấn rỗng (?) khác với không có truy vấn.

Sửa chuỗi truy vấn

Mỗi tham số là một dòng gồm tên và giá trị. Thứ tự và tên trùng được giữ nguyên; tham số bạn không đụng đến được ghép lại đúng như đã viết, tham số đã sửa được mã hóa bằng %20 hoặc + nếu truy vấn vốn dùng +. Sắp xếp lại, xóa, thêm dòng rồi sao chép URL đã ghép. Xem thêm công cụ Base64 và định dạng JSON khi tham số chứa dữ liệu mã hóa. Mọi thứ chạy trong trình duyệt, không tải lên đâu cả và không bao giờ tự mở liên kết.

Câu hỏi thường gặp

encodeURI và encodeURIComponent khác nhau thế nào?

encodeURIComponent mã hóa các ký tự có nghĩa trong cú pháp URL (/ ? : @ & = + $ # , ;) nên đúng cho một giá trị riêng lẻ. encodeURI giữ nguyên chúng nên đúng cho địa chỉ hoàn chỉnh. Dùng encodeURI cho một giá trị sẽ để & hoặc = bên trong làm đổi nghĩa URL.

Dấu cách nên là %20 hay +?

Trong đường dẫn luôn là %20. Trong chuỗi truy vấn, + chỉ là dấu cách ở kiểu mã hóa biểu mẫu mà form HTML và URLSearchParams dùng. Nhiều máy chủ đọc được cả hai, nhưng %20 an toàn hơn, còn %2B luôn là dấu cộng.

Vì sao kết quả giải mã vẫn còn dấu %?

Hoặc nó đã bị mã hóa hai lần (%2520 giải thành %20, rồi thành dấu cách), hoặc dấu % là thật. Nút giải mã lại xuất hiện khi kết quả vẫn còn chuỗi hợp lệ.

Công cụ có gửi URL đi đâu không?

Không. Mọi thứ tính trong trình duyệt của bạn và liên kết chỉ hiện dưới dạng văn bản, không bao giờ được mở hay tải.