URL Encoding là gì? Giải mã các ký tự %20, %3F trong link

URL Encoding (Percent-Encoding) là gì?

URL Encoding, hay còn gọi là Percent-Encoding (Mã hóa phần trăm), là một cơ chế chuyển đổi các ký tự trong một URL (Uniform Resource Locator) thành một định dạng mà có thể được truyền tải an toàn qua Internet. Quá trình này đảm bảo rằng tất cả các trình duyệt, máy chủ và ứng dụng web đều có thể hiểu và xử lý URL một cách nhất quán.

Định nghĩa mã hóa URL theo chuẩn RFC 3986

Theo tài liệu RFC 3986 của IETF (Internet Engineering Task Force), URL chỉ được phép chứa một tập hợp ký tự giới hạn thuộc bộ mã ASCII. Các ký tự không thuộc bộ ký tự này hoặc có ý nghĩa đặc biệt (như dấu cách, ?, &) phải được mã hóa.

Cơ chế mã hóa rất đơn giản: ký tự đặc biệt sẽ được thay thế bằng dấu phần trăm (%) theo sau là hai chữ số thập lục phân (hexadecimal) tương ứng với giá trị của nó trong bộ mã ASCII hoặc UTF-8.

Ví dụ:

  • Dấu cách (space) có giá trị ASCII là 32, trong hệ thập lục phân là 20. Khi mã hóa sẽ trở thành %20.
  • Ký tự ? có giá trị ASCII là 63, trong hệ thập lục phân là 3F. Khi mã hóa sẽ trở thành %3F.

Mục đích cốt lõi của việc mã hóa URL

Mục đích chính của URL Encoding là đảm bảo tính đồng nhất và toàn vẹn của dữ liệu khi nó được gửi từ client (ví dụ: trình duyệt web) đến server. Nếu không có mã hóa, các ký tự đặc biệt có thể bị hiểu sai, dẫn đến lỗi 404 (Not Found), xử lý sai yêu cầu hoặc thậm chí là các lỗ hổng bảo mật.

Tại sao URL có ký tự %? Lý do bắt buộc phải mã hóa URL

Sự xuất hiện của ký tự % trong URL là dấu hiệu của việc mã hóa đã được thực hiện. Đây là yêu cầu bắt buộc vì những lý do sau:

Đảm bảo tính toàn vẹn khi truyền dữ liệu giữa client và server

Khi bạn nhập một URL vào trình duyệt, nó sẽ được gửi đến máy chủ web. Quá trình truyền tải này có thể đi qua nhiều hệ thống và giao thức khác nhau. URL Encoding đảm bảo rằng chuỗi URL sẽ không bị thay đổi hoặc diễn giải sai trong suốt quá trình này, giúp máy chủ nhận được chính xác yêu cầu mà người dùng đã gửi.

Xử lý các ký tự dành riêng (Reserved Characters) có ý nghĩa đặc biệt

Một số ký tự trong URL có chức năng cú pháp đặc biệt. Chúng được gọi là ký tự dành riêng.

  • ?: Bắt đầu một chuỗi truy vấn (query string).
  • &: Phân tách các cặp tham số trong query string.
  • =: Gán giá trị cho một tham số.
  • #: Bắt đầu một định danh phân đoạn (fragment identifier).
  • /: Phân tách các phần trong đường dẫn (path).

Nếu bạn muốn truyền chính các ký tự này như một phần của dữ liệu (ví dụ: tìm kiếm chuỗi “C++”), bạn phải mã hóa chúng (C%2B%2B) để máy chủ không nhầm lẫn chúng với cú pháp của URL.

Sơ đồ minh họa quy trình URL Encoding từ trình duyệt đến máy chủ.
Quy trình mã hóa URL đảm bảo máy chủ hiểu đúng yêu cầu từ người dùng.

Hỗ trợ bộ ký tự ngoài ASCII (ví dụ: UTF-8 cho Tiếng Việt)

URL ban đầu chỉ được thiết kế cho bộ ký tự ASCII của Mỹ. Để hỗ trợ các ngôn ngữ toàn cầu như Tiếng Việt, các ký tự UTF-8 (ví dụ: á, ô, đ) phải được mã hóa. Mỗi byte của ký tự UTF-8 sẽ được chuyển thành định dạng %xx.

Ví dụ: Ký tự ô trong UTF-8 là C3 B4, khi được mã hóa sẽ trở thành %C3%B4.

Ngăn chặn hiểu nhầm cú pháp URL bởi trình duyệt và máy chủ

Nếu không mã hóa, một URL như /search?query=what is C&S? sẽ bị hiểu sai. Máy chủ sẽ nghĩ rằng query là what is C và có một tham số khác tên là S? không có giá trị. Bằng cách mã hóa thành /search?query=what%20is%20C%26S%3F, máy chủ sẽ hiểu chính xác toàn bộ chuỗi what is C&S? là giá trị của tham số query.

Cơ chế hoạt động của mã hóa URL

Quy tắc mã hóa dựa trên việc phân loại các ký tự thành ba nhóm chính:

Các ký tự an toàn trong URL (Unreserved Characters) không cần mã hóa

Đây là các ký tự được phép xuất hiện trực tiếp trong URL mà không cần mã hóa. Chúng bao gồm:

  • Các chữ cái tiếng Anh: A-Z, a-z
  • Các chữ số: 0-9
  • Các ký tự: -, _, ., ~

Các ký tự dành riêng (Reserved Characters): Khi nào cần mã hóa

Đây là các ký tự có ý nghĩa cú pháp đặc biệt trong URL. Chúng chỉ được mã hóa khi bạn muốn sử dụng chúng như một phần của dữ liệu, chứ không phải với vai trò cú pháp của chúng.

  • Các ký tự: !, #, $, &, ', (, ), *, +, ,, /, :, ;, =, ?, @, [, ]

Các ký tự không an toàn (Unsafe Characters): Luôn phải mã hóa

Đây là nhóm ký tự luôn phải được mã hóa vì chúng có thể gây ra sự nhầm lẫn hoặc không được một số hệ thống hỗ trợ. Nhóm này bao gồm:

  • Dấu cách (space): Gây khó khăn trong việc xác định điểm bắt đầu và kết thúc của URL.
  • Dấu ngoặc kép ("): Được sử dụng để phân tách URL trong một số ngữ cảnh.
  • Các ký tự điều khiển ASCII (các ký tự không in được).

Bảng tra cứu các ký tự URL Encoding thường gặp (E-E-A-T)

Để tiện tham khảo, dưới đây là bảng mã hóa của các ký tự thường gặp nhất trong thực tế. Việc nắm vững bảng này giúp các lập trình viên và chuyên gia SEO dễ dàng gỡ lỗi và xây dựng các URL hợp lệ.

| Ký tự gốc | Mã hóa (Encoded) | Ý nghĩa/Trường hợp sử dụng |
| :— | :— | :— |
| (dấu cách) | %20 | Phân tách các từ trong đường dẫn hoặc giá trị tham số. |
| + | %2B | Dùng cho phép toán hoặc các ký tự đặc biệt trong dữ liệu. |
| ? | %3F | Khi cần truyền ký tự dấu hỏi như một phần của dữ liệu. |
| & | %26 | Khi cần truyền ký tự “và” như một phần của dữ liệu. |
| = | %3D | Khi cần truyền ký tự dấu bằng như một phần của dữ liệu. |
| # | %23 | Khi cần truyền ký tự thăng như một phần của dữ liệu. |
| % | %25 | Khi cần truyền chính ký tự phần trăm. |
| / | %2F | Khi cần truyền ký tự gạch chéo trong tham số. |
| : | %3A | Khi cần truyền ký tự hai chấm trong tham số. |
| @ | %40 | Khi cần truyền ký tự a còng trong tham số. |

Bảng tra cứu các ký tự URL Encoding phổ biến như dấu cách, ?, &.
Bảng tra cứu các ký tự mã hóa URL thường gặp trong lập trình và SEO.

Mã hóa dấu cách: So sánh %20 và dấu +

Cả %20 và dấu + đều được dùng để thay thế dấu cách, nhưng có sự khác biệt quan trọng:

  • %20 (chuẩn RFC 3986): Là cách mã hóa chính thức cho dấu cách và có thể được sử dụng ở mọi thành phần của URL (path, query string).
  • +: Là một cách mã hóa cũ hơn, chỉ hợp lệ khi dùng trong phần query string (sau dấu ?). Nhiều hệ thống cũ vẫn dùng và hiểu định dạng này.

Lời khuyên: Để đảm bảo tính tương thích tối đa, hãy luôn sử dụng %20.

Mã hóa các ký tự điều khiển trong URL

Các ký tự điều khiển (control characters) trong bộ mã ASCII (ví dụ: tab, xuống dòng) là các ký tự không thể in ra và không được phép có trong URL. Chúng phải được mã hóa phần trăm nếu vì một lý do nào đó cần truyền đi.

Mã hóa ký tự tiếng Việt (UTF-8)

Như đã đề cập, tiếng Việt sử dụng bộ mã UTF-8. Mỗi ký tự tiếng Việt có dấu sẽ được biểu diễn bởi 2 hoặc 3 byte, và mỗi byte này sẽ được mã hóa thành dạng %xx. Điều này lý giải tại sao URL chứa tiếng Việt thường rất dài sau khi được mã hóa.

Ví dụ: Lập trình -> L%E1%BA%ADp%20tr%C3%ACnh

Công cụ kiểm tra URL Encode và Decode trực tuyến

Để không phải tra cứu thủ công, bạn có thể sử dụng các công cụ online để mã hóa (Encode) hoặc giải mã (Decode) một chuỗi URL một cách nhanh chóng.

Giới thiệu công cụ URL Encoder/Decoder đơn giản

Các công cụ này thường có giao diện rất đơn giản: một ô văn bản để bạn dán chuỗi cần xử lý và hai nút “Encode” và “Decode”. Kết quả sẽ ngay lập tức xuất hiện ở ô bên cạnh hoặc bên dưới.

Giao diện công cụ URL Encoding và Decode online miễn phí.
Sử dụng công cụ trực tuyến để nhanh chóng kiểm tra và chuyển đổi URL.

Hướng dẫn sử dụng nhanh để kiểm tra một URL bất kỳ

  1. Sao chép (Copy) toàn bộ URL hoặc đoạn text bạn muốn kiểm tra.
  2. Dán (Paste) vào ô nhập liệu của công cụ.
  3. Nhấn nút “Encode” để xem dạng mã hóa hoặc “Decode” để chuyển từ dạng mã hóa về dạng gốc.
  4. Kiểm tra kết quả để hiểu rõ các ký tự đã được chuyển đổi như thế nào.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *