Mã hóa URL

Mã hóa phần trăm một đoạn văn bản để nó có thể đi an toàn trong một URL, hoàn toàn trong trình duyệt của bạn.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên, ghi log hay lưu trữ.

URL có ngữ pháp riêng, và các ký tự thuộc về ngữ pháp đó — "?", "&", "/", "#", dấu cách — phải được thoát khi chúng là một phần của giá trị chứ không phải của cấu trúc. Việc thoát đó chính là mã hóa phần trăm.

Cách hoạt động

Mọi ký tự không thuộc tập không dành riêng của RFC 3986 — chữ cái, chữ số, "-", ".", "_" và "~" — được thay bằng một dấu phần trăm và giá trị thập lục phân của từng byte UTF-8 của nó. Dấu cách thành %20 và một chữ cái có dấu thành hai mã thoát, vì nó chiếm hai byte trong UTF-8.

Kiểu dữ liệu biểu mẫu tồn tại vì cách gửi biểu mẫu HTML có trước quy tắc đó: ở đó dấu cách là "+" và "~" cũng bị thoát. Hãy chọn kiểu này khi bạn tạo phần thân application/x-www-form-urlencoded, và kiểu thành phần cho mọi trường hợp khác.

Ví dụ

Trường hợp Dữ liệu nhập Kết quả
Một cụm từ tìm kiếm đi vào query string coffee & cake coffee%20%26%20cake
Cùng cụm từ đó dưới dạng dữ liệu biểu mẫu coffee & cake coffee+%26+cake

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

Tôi có nên mã hóa cả một URL bằng công cụ này không?

Không. Mã hóa toàn bộ URL cũng sẽ thoát cả "://" và các dấu phân cách, để lại cho bạn một chuỗi mà không client nào đi theo được. Hãy mã hóa từng giá trị riêng rồi ghép URL từ chúng.

Vì sao ở đây "!" bị mã hóa còn console trình duyệt của tôi lại để nguyên?

encodeURIComponent của JavaScript cố ý bỏ qua "!", "'", "(", ")" và "*" dù RFC 3986 dành riêng chúng. Mã hóa chúng thì luôn được chấp nhận và tránh bất ngờ với những trình phân tích chặt chẽ hơn, nên công cụ này làm vậy.

Còn dấu "#" của fragment thì sao?

Một dấu "#" nằm trong giá trị phải được mã hóa thành %23; nếu không, mọi thứ phía sau nó sẽ được đọc là fragment và không bao giờ đến được máy chủ.

Cần biết

  • Mọi thứ diễn ra trong trình duyệt của bạn. Nội dung bạn dán không được tải lên, không được ghi log và không được lưu trữ.

Nguồn

Tất cả công cụ Lập trình