Bộ mã hóa Thành phần URI

Nếu bạn từng truyền một giá trị như name=John & Jane vào một URL mà không mã hóa nó, bạn biết nỗi đau: dấu & bị đọc như một tham số mới và máy chủ thấy rác. Công cụ này mã hóa phần trăm mọi chuỗi để dùng an toàn như một thành phần URI theo RFC 3986, biến mỗi ký tự dành riêng thành một cặp %HH (gồm cả khoảng trắng). Dán một fragment, một giá trị truy vấn hay một đích chuyển hướng và nhận lại thứ an toàn để nối vào bất kỳ URL nào.

Cách mã hóa một thành phần URI

  1. 1

    Dán giá trị của bạn

    Thả vào một giá trị tham số truy vấn đơn, một đoạn đường dẫn hoặc một chuỗi fragment.

  2. 2

    Chọn mã hóa hoặc giải mã

    Đổi chiều để biến mã hóa phần trăm trở lại thành các ký tự gốc.

  3. 3

    Chạy nó

    Công cụ mã hóa UTF-8 từng ký tự, rồi thay mỗi byte dành riêng bằng %HH.

  4. 4

    Sao chép kết quả

    Thả kết quả trực tiếp vào mẫu URL hoặc client API của bạn.

Cái gì được thoát

Bộ mã hóa này tuân theo RFC 3986: chỉ tập không dành riêng được giữ nguyên, A-Z a-z 0-9 - _ . ~. Mọi thứ khác trở thành UTF-8 mã hóa phần trăm, gồm cả khoảng trắng và các ký tự phân tách phụ ! * ' ( ) mà encodeURIComponent của JavaScript sẽ để yên.

Ký tự Mã hóa thành
khoảng trắng %20
! %21
# %23
& %26
' %27
( %28
) %29
* %2A
+ %2B
/ %2F
= %3D
? %3F
é %C3%A9

Thành phần so với URI đầy đủ

Bộ mã hóa này nghiêm ngặt hơn encodeURI, vốn để yên : / ? # [ ] @ ! $ & ' ( ) * + , ; = vì các ký tự đó mang tính cấu trúc trong một URL. Với một giá trị bạn nối vào chuỗi truy vấn, bạn muốn dạng nghiêm ngặt, và đó chính xác là thứ công cụ này tạo ra: nó thậm chí thoát cả ! ' ( ) *, đi xa hơn một bước so với encodeURIComponent của JavaScript.

const url = `/search?q=${encodeURIComponent(userInput)}`;

Cạm bẫy thường gặp

  • Mã hóa hai lần: mã hóa thứ đã được mã hóa cho bạn %2520 thay vì %20. Luôn giải mã trước nếu bạn không chắc về nguồn.
  • Dấu cộng trong biểu mẫu: việc gửi biểu mẫu HTML mã hóa khoảng trắng thành +, không phải %20. Các bộ giải mã tuân thủ RFC 3986 nghiêm ngặt (gồm cả bộ này) sẽ không biến + trở lại thành khoảng trắng. Hãy dùng một bộ giải mã hiểu biểu mẫu cho những trường hợp đó.
  • Dấu phân tách đường dẫn: mã hóa / ở đây biến nó thành %2F. Nếu bạn muốn giữ cấu trúc đường dẫn thật, hãy nối các đoạn trước rồi mã hóa từng đoạn riêng.

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

Đây là mã hóa phần trăm theo RFC 3986, dạng nghiêm ngặt. Nó thoát :, /, ?, # và các ký tự dành riêng khác (cùng với !, ', (, ) và *) vì một thành phần không nên mang cấu trúc URL bên trong. Điều đó khiến nó nghiêm ngặt hơn encodeURIComponent của JavaScript và nghiêm ngặt hơn nhiều so với encodeURI.

%20 là cách của RFC 3986. + cho khoảng trắng là di sản từ mã hóa thân application/x-www-form-urlencoded. Với chuỗi truy vấn trong URL, %20 luôn an toàn; + chỉ được mong đợi ở máy chủ khi nó được tạo bởi một biểu mẫu POST.

Mỗi ký tự được mã hóa UTF-8 trước, rồi mỗi byte được thoát. Một ký tự như 日 thành %E6%97%A5 (ba byte).

Không. Giá trị được mã hóa phần trăm ở phía máy chủ để dựng kết quả của bạn và không được lưu trữ hay ghi nhật ký; không có gì bạn dán được giữ lại sau khi phản hồi được gửi đi.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác