Mã hóa URL

Một số ký tự không thể 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 phương thức mã hoá URL để giải quyết vấn đề này, trong khi các biểu mẫu HTML thực hiện một số phương án thay thế bổ sung thay vì áp dụng phương thức mã hoá theo tỷ lệ phần trăm cho tất cả các ký tự như vậy.

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

Bạn nên 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 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ể cho rằng một URL "hợp lệ" là điều hiển nhiên, nhưng thực tế thì không phải vậy. Ví dụ: một URL được nhập trong thanh địa chỉ trong trình duyệt có thể chứa các ký tự đặc biệt (ví dụ: "上海+中國"); trình duyệt cần phải dịch nội bộ các ký tự đó sang một chế độ mã hoá khác trước khi truyền. Cũng như vậy, mọi mã tạo hoặc chấp nhận dữ liệu đầu vào UTF-8 đều có thể coi các URL chứa ký tự UTF-8 là "hợp lệ", nhưng cũng cần phải 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ã hoá URL hoặc mã hoá phần trăm.

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

Chúng tôi cần dịch các ký tự đặc biệt vì tất cả URL đều phải tuân theo cú pháp được 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 con đặc biệt gồm các ký tự ASCII: ký hiệu chữ-số quen thuộc và một số ký tự dành riêng để 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ựViệc 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 9 6 7 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ỗ ! * ' ( ) ; : @ & = + $ , / ? % # [ ] Ký tự điều khiển và/hoặc chuỗi văn bản

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

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

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

Các ký tự phổ biến cần mã hoá

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

Ký tự không an toàn Giá trị được mã hóa
Khoảng trống %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

Đôi khi, 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 rất khó khăn. Ví dụ: người dùng có thể nhập địa chỉ là "5th&Main St." Nhìn chung, bạn nên tạo URL từ các phần của URL đó, coi mọi dữ liệu do người dùng nhập là ký tự cố định.

Ngoài ra, URL được giới hạn ở 8192 ký tự đối với tất cả các dịch vụ web của 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 áp dụng. Tuy nhiên, xin lưu ý rằng một số dịch vụ có nhiều tham số có thể dẫn đến URL dài.