Bộ mã hóa URL

5 trên 2 xếp hạng

Bộ mã hóa URL là công cụ miễn phí giúp chuyển đổi chuỗi sang dạng mã hóa biểu mẫu dùng trong tham số truy vấn URL và các dữ liệu web dạng văn bản khác.

Mã hóa URL là gì và dùng để làm gì?

Mã hóa URL thay thế các ký tự có ý nghĩa đặc biệt trong URL bằng dấu phần trăm, theo sau là các chữ số thập lục phân. Nhờ đó, văn bản có thể đi qua những hệ thống chỉ chấp nhận một tập ký tự hạn chế.

Ví dụ, dấu và dùng để phân tách các tham số truy vấn. Vì vậy, nếu dấu này nằm trong một giá trị, nó phải được mã hóa thành %26. Khoảng trắng cũng cần được xử lý riêng. Công cụ này sử dụng hàm urlencode của PHP, hàm này chuyển khoảng trắng thành dấu cộng.

Trước khi mã hóa: tea and cake

Sau khi mã hóa: tea+and+cake

Bạn có thể gặp văn bản đã mã hóa URL trong:

  • chuỗi truy vấn do biểu mẫu web gửi đi;
  • URI dữ liệu chứa văn bản không thể xuất hiện ở dạng nguyên gốc;
  • liên kết có trong email;
  • giá trị URL được lưu trong tải trọng JSON;
  • tham số chuyển hướng và callback của ứng dụng web;
  • URL liên quan đến tên miền quốc tế hóa, dù bản thân tên miền có thể cần dùng Punycode thay vì mã hóa phần trăm.

Mã hóa URL không phải là mã hóa bảo mật và không có tác dụng giữ bí mật. Bất kỳ ai nhìn thấy một giá trị URL được mã hóa phần trăm đều có thể giải mã giá trị đó.

Cách dùng Bộ mã hóa URL

Nhập chuỗi cần mã hóa, chạy công cụ rồi xem giá trị đã chuyển đổi trong trường kết quả Đã mã hóa URL. Chỉ mã hóa chính giá trị đó, không mã hóa dấu ngoặc kép bao quanh hoặc phần văn bản giải thích.

Quá trình xử lý diễn ra trên máy chủ. Dữ liệu bạn nhập được truyền đến máy chủ qua HTTPS và không được lưu trữ. Dù vậy, không nên đưa mật khẩu, mã thông báo phiên hoặc dữ liệu cá nhân riêng tư vào URL vì địa chỉ web có thể xuất hiện trong lịch sử trình duyệt, hệ thống phân tích và nhật ký máy chủ.

Để đảo ngược thao tác, hãy dùng Bộ giải mã URL. Nếu cả hai chiều cùng sử dụng một kiểu mã hóa ký tự và các quy tắc mã hóa biểu mẫu, giá trị được giải mã đúng sẽ khớp với văn bản ban đầu.

Nên mã hóa toàn bộ URL hay chỉ giá trị tham số?

Thông thường, bạn chỉ nên mã hóa từng giá trị tham số, không mã hóa toàn bộ URL. Nếu mã hóa cả địa chỉ, các ký tự cấu trúc như dấu hai chấm, dấu gạch chéo, dấu hỏi và dấu bằng cũng sẽ bị thay thế.

Giả sử giá trị tìm kiếm là green tea & coffee. Dạng đã mã hóa của giá trị này là green+tea+%26+coffee và có thể được đặt sau tên tham số. Nếu mã hóa toàn bộ địa chỉ, các dấu phân cách mà trình duyệt cần để nhận biết lược đồ, máy chủ, đường dẫn và chuỗi truy vấn sẽ bị che khuất.

Việc công cụ này sử dụng urlencode rất phù hợp với tham số truy vấn theo kiểu biểu mẫu HTML. Tuy nhiên, một số API và đoạn đường dẫn tuân theo quy ước RFC 3986, trong đó khoảng trắng được viết thành %20 thay vì +. Hãy kiểm tra xem hệ thống nhận dữ liệu yêu cầu mã hóa biểu mẫu bằng + hay mã hóa theo RFC 3986 bằng %20.

Ví dụ mã hóa URL

Chữ cái và chữ số ASCII vẫn giữ nguyên để có thể đọc được. Khoảng trắng trở thành dấu cộng, còn dấu câu dành riêng và văn bản không thuộc ASCII được biểu diễn bằng các byte đã mã hóa.

  • hello world trở thành hello+world.
  • tea & cake trở thành tea+%26+cake.
  • email=test@example.com trở thành email%3Dtest%40example.com.
  • 100% ready trở thành 100%25+ready.
  • café trở thành caf%C3%A9 khi văn bản nguồn dùng UTF-8.

Trước tiên, các chữ cái có dấu và hệ chữ viết không thuộc bảng chữ cái Latinh được một kiểu mã hóa ký tự biểu diễn thành byte, thường là UTF-8 trên web. Sau đó, mỗi byte nằm ngoài tập ký tự được phép sẽ được chuyển thành một chuỗi thoát phần trăm riêng. Vì vậy, một ký tự nhìn thấy được có thể tạo ra nhiều nhóm bắt đầu bằng %.

Các chữ số không cần xử lý đặc biệt. Nếu dữ liệu nhập trống, kết quả cũng không có nội dung mã hóa. Dữ liệu nhập rất dài có thể tăng kích thước đáng kể vì mỗi byte được mã hóa sẽ chiếm ba ký tự.

Vì sao giải mã URL thất bại hoặc cho ra ký tự rác?

Quá trình giải mã thường thất bại vì dữ liệu đầu vào được mã hóa theo quy tắc khác, đã bị mã hóa nhiều lần hoặc không biểu diễn văn bản bằng bộ ký tự dự kiến.

  • Cách xử lý khoảng trắng khác nhau. Bộ giải mã biểu mẫu coi + là khoảng trắng, còn bộ giải mã phần trăm nghiêm ngặt có thể giữ nguyên ký tự này dưới dạng dấu cộng.
  • Mã hóa hai lần. Bản thân dấu phần trăm trong %26 có thể được chuyển thành %25, tạo ra %2526. Khi đó, giải mã một lần sẽ trả về %26 thay vì dấu và ban đầu.
  • Sai kiểu mã hóa ký tự. Nếu các byte UTF-8 được giải mã bằng một bộ ký tự khác, kết quả có thể chứa ký hiệu thay thế hoặc các chữ cái bị lỗi.
  • Dữ liệu nhị phân thay vì văn bản. Các byte đã giải mã có thể là hình ảnh, tệp lưu trữ hoặc một loại tệp khác. Vì vậy, việc hiển thị chúng dưới dạng văn bản sẽ tạo ra ký tự rác.
  • Sai định dạng hoặc bảng ký tự. Base64 an toàn cho URL, Base64 tiêu chuẩn và mã hóa phần trăm là các định dạng khác nhau. Dùng bộ giải mã URL cho văn bản Base64 sẽ không khôi phục được giá trị mong muốn.

Mã hóa URL không có ký tự đệm. Nếu bộ giải mã báo thiếu phần đệm, dữ liệu đầu vào có thể là Base64 hoặc một định dạng có phần đệm khác, chứ không phải văn bản được mã hóa phần trăm.

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

Mã phần trăm viết hoa và viết thường có giống nhau không?

Có. Chữ cái thập lục phân trong chuỗi thoát phần trăm không phân biệt chữ hoa và chữ thường, vì vậy %2F và %2f đều biểu diễn dấu gạch chéo. Nên dùng chữ số thập lục phân viết hoa để cách biểu diễn được nhất quán.

Mã hóa URL có chuyển đổi được tên miền quốc tế hóa không?

Không. Nhãn tên miền, chẳng hạn một tên có chứa é, thường cần được xử lý theo quy tắc Tên miền quốc tế hóa và chuyển sang dạng Punycode ASCII bắt đầu bằng xn--. Mã hóa phần trăm được dùng cho các thành phần URL khác và không nên được xem là phương án thay thế cho quá trình chuyển đổi này.

Dấu xuống dòng và tab sẽ được xử lý thế nào?

Các byte của tab và dấu xuống dòng được mã hóa phần trăm vì chúng không thể xuất hiện trực tiếp trong một giá trị URL thông thường. Tab thường được biểu diễn thành %09, còn cách biểu diễn dấu kết thúc dòng phụ thuộc vào việc dữ liệu nguồn dùng ký tự LF hay CRLF.

Vì sao URL đã mã hóa vẫn không hoạt động khi dán vào ứng dụng?

Ứng dụng có thể yêu cầu giá trị thô rồi tự mã hóa, dẫn đến mã hóa hai lần. Ứng dụng cũng có thể từ chối URL vì giới hạn tổng độ dài hoặc vì một ký tự dành riêng đã bị mã hóa trong phần cấu trúc của địa chỉ. Trước khi mã hóa, hãy kiểm tra chính xác ứng dụng yêu cầu thành phần nào.

Dữ liệu chuỗi truy vấn đã mã hóa có an toàn để chia sẻ không?

Không. Mã hóa phần trăm trong URL chỉ thay đổi cách biểu diễn. Trình duyệt và công cụ dành cho nhà phát triển vẫn có thể hiển thị giá trị ban đầu. Trước khi chia sẻ liên kết, hãy kiểm tra các tham số truy vấn để phát hiện địa chỉ email, thông tin tham chiếu tài khoản, mã thông báo truy cập và những dữ liệu khác không nên bị tiết lộ.

Các công cụ tương tự

Bộ giải mã URL

Giải mã đầu vào URL trở lại thành một chuỗi bình thường.

4,611
60

Công cụ phổ biến