Mã hóa URL

Một số ký tự không được là một phần của URL (ví dụ: dấu cách) và một số ký tự khác có ý nghĩa đặc biệt trong URL. Trong biểu mẫu HTML, ký tự = được dùng để phân tách tên khỏi giá trị. Cú pháp chung của URI sử dụng mã hoá URL để xử lý vấn đề này, trong khi biểu mẫu HTML thực hiện một số thay thế bổ sung thay vì áp dụng phương pháp mã hoá phần trăm cho tất cả các ký tự đó.

Ví dụ: dấu cách trong một chuỗi được mã hóa bằng %20 hoặc thay thế bằng dấu cộng (+). Nếu bạn sử dụng ký tự gạch thẳng (|) làm dấu phân tách, hãy nhớ mã hóa đường dẫn dưới dạng %7C. Dấu phẩy trong một chuỗi phải được mã hoá là %2C.

Bạn nên sử dụng các thư viện tạo URL thông thường của nền tảng để tự động mã hoá URL, nhằm đảm bảo các URL được thoát đúng cách cho nền tảng của bạn.

Tạo URL hợp lệ

Bạn có thể nghĩ rằng một "hợp lệ" URL rõ ràng, nhưng không hoàn toàn đúng. Ví dụ: URL được nhập vào thanh địa chỉ trong một trình duyệt có thể chứa các ký tự đặc biệt (ví dụ: "上海+中國"); trình duyệt cần dịch nội bộ các ký tự đó thành một mã hoá khác trước khi truyền. Tương tự như vậy, mọi mã tạo ra hoặc chấp nhận dữ liệu nhập UTF-8 đều có thể coi các URL có ký tự UTF-8 là "valid" nhưng cũng cần dịch các ký tự đó trước khi gửi đến máy chủ web. Quá trình này gọi là mã hóa URL hay mã hóa phần trăm.

Các ký tự đặc biệt

Chúng ta cần dịch các ký tự đặc biệt vì tất cả các URL đều phải tuân thủ cú pháp đã chỉ định trong thông số kỹ thuật Mã nhận dạng tài nguyên đồng nhất (URI). Trên thực tế, điều này có nghĩa là URL chỉ được chứa một tập hợp con đặc biệt gồm các ký tự ASCII: ký hiệu chữ và số quen thuộc và một số ký tự dành riêng để sử dụng làm ký tự điều khiển trong URL. Bảng này tóm tắt các ký tự sau:

Tóm tắt các ký tự URL hợp lệ
Đặtký tựTình trạng sử dụng URL
Chữ và số a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 7 8 Chuỗi văn bản, cách sử dụng lược đồ (http), cổng (8080), v.v.
Không dành riêng – _ . ~ Chuỗi văn bản
Đã đặt chỗ ! * ? % # [ ] Kiểm soát các ký tự và/hoặc Chuỗi văn bản

Khi tạo URL hợp lệ, bạn phải đảm bảo rằng URL đó chỉ chứa các ký tự hiển thị trong bảng Tóm tắt các ký tự URL hợp lệ. Thông thường, việc tạo URL để sử dụng bộ ký tự này thường dẫn đến hai vấn đề: một nội dung bỏ sót và một nội dung thay thế:

  • Ký tự mà bạn muốn xử lý tồn tại bên ngoài tập hợp ở trên. Ví dụ: các ký tự bằng tiếng nước ngoài như 上海+中國 cần được mã hoá bằng các ký tự trên. Theo quy ước phổ biến, dấu cách (không được phép trong URL) cũng được biểu thị bằng ký tự dấu cộng '+'.
  • Ký tự tồn tại trong bộ ký tự ở trên được đặt là ký tự dành riêng, nhưng cần được sử dụng theo nghĩa đen. Ví dụ: ? được sử dụng trong các URL để cho biết phần đầu của chuỗi truy vấn; nếu bạn muốn sử dụng chuỗi "; và Mysterions," bạn cần mã hóa ký tự '?'.

Tất cả ký tự cần mã hoá URL đều được mã hoá bằng ký tự '%' và giá trị hex hai ký tự tương ứng với ký tự UTF-8 của các ký tự đó. Ví dụ: 上海+中國 trong UTF-8 sẽ được mã hoá URL là %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. Chuỗi ? and the Mysterians sẽ được mã hoá URL thành %3F+and+the+Mysterians hoặc %3F%20and%20the%20Mysterians.

Ký tự phổ biến cần mã hóa

Một số ký tự phổ biến phải được mã hóa là:

Ký tự không an toàn Giá trị được mã hoá
Vũ trụ %20
". %22
Gần %3C
> %3E
# %23
% %25
| %7C

Việc chuyển đổi một URL mà bạn nhận được từ hoạt động đầu vào của người dùng đôi khi rất khó khăn. Ví dụ: người dùng có thể nhập một địa chỉ dưới dạng "5th&Main St." Thông thường, bạn nên tạo URL từ các phần của URL, coi mọi thao tác nhập của người dùng là các ký tự chữ.

Ngoài ra, URL được giới hạn ở 8192 ký tự đối với mọi dịch vụ web trên Nền tảng Google Maps và API web tĩnh. Đối với hầu hết các dịch vụ, giới hạn ký tự này hiếm khi được đạt. Tuy nhiên, hãy lưu ý rằng một số dịch vụ có một vài tham số có thể dẫn đến URL dài.