Mã hóa URL HTML

Bộ định vị tài nguyên thống nhất [URL] chỉ đơn giản là địa chỉ của một trang web để truy cập nội dung trang web như www. chuyên viên máy tính. tổ chức. Nhưng có một số ký tự được phép sử dụng trong URL như bảng chữ cái A-Z và a-z, số 0-9 và một vài ký tự đặc biệt. Chúng có thể được sử dụng như hiện tại nhưng phần còn lại của các ký tự không có trong danh sách này được sử dụng sau khi mã hóa chúng thành một dạng phù hợp. Mã hóa URL là quá trình chuyển đổi URL thành định dạng hợp lệ được các trình duyệt web chấp nhận. Mã hóa URL diễn ra bằng cách thay thế tất cả các ký tự không được phép bằng dấu % theo sau là hai chữ số thập lục phân. Hai giá trị thập lục phân này đại diện cho các giá trị số của ký tự trong bộ ký tự ASCII. Ví dụ: một khoảng trắng không được chấp nhận trong một URL và được thay thế bằng dấu ‘%20’ hoặc dấu ‘+’ trong khi mã hóa. Tương tự, ký hiệu $ được thay thế bằng ‘%24’. Ký tự dành riêng. Có một số ký tự đôi khi có ý nghĩa đặc biệt trong URL và nó có thể được sử dụng theo cả hai cách. Ví dụ: ký tự ‘/’ là ký tự dành riêng và nó có ý nghĩa đặc biệt khi được sử dụng làm dấu phân cách để phân tách các đường dẫn của URL. Ở đây nó được sử dụng bằng cách mã hóa thành ‘%2F’. Khác khi nó không có mục đích đặc biệt, nó có thể được sử dụng bình thường. Có nhiều ký tự dành riêng được liệt kê bên dưới

Ký tự được mã hóa. %21*%2A‘%27[%28]%29;%3B. %3A@%40&%26=%3D+%2B$%24,%2C/%2F?%3F#%23[%5B]%5D

Một số ký tự cần được mã hóa trong khi một số ký tự không cần. Dưới đây là bảng phân loại thể hiện nhóm ký tự cần mã hóa

Mã hóa phần trăm, còn được gọi là mã hóa URL, là phương pháp mã hóa dữ liệu tùy ý trong Mã định danh tài nguyên đồng nhất [URI] chỉ sử dụng các ký tự US-ASCII giới hạn hợp pháp trong URI. Mặc dù nó được gọi là mã hóa URL, nhưng nó cũng được sử dụng phổ biến hơn trong bộ Định danh tài nguyên đồng nhất [URI] chính, bao gồm cả Bộ định vị tài nguyên đồng nhất [URL] và Tên tài nguyên đồng nhất [URN]. Như vậy, nó cũng được sử dụng trong việc chuẩn bị dữ liệu của loại phương tiện application/x-www-form-urlencoded, như thường được sử dụng trong việc gửi dữ liệu biểu mẫu HTML trong các yêu cầu HTTP

Phần trăm mã hóa trong một URI[sửa]

Các loại ký tự URI[sửa]

Các ký tự được phép trong URI là dành riêng hoặc không dành riêng [hoặc ký tự phần trăm như một phần của mã hóa phần trăm]. Các ký tự dành riêng là những ký tự đôi khi có ý nghĩa đặc biệt. Ví dụ: các ký tự gạch chéo về phía trước được sử dụng để phân tách các phần khác nhau của URL [hoặc tổng quát hơn là URI]. Các ký tự không được đặt trước không có ý nghĩa như vậy. Sử dụng mã hóa phần trăm, các ký tự dành riêng được biểu diễn bằng các chuỗi ký tự đặc biệt. Tập hợp các ký tự dành riêng và không dành riêng và các trường hợp trong đó một số ký tự dành riêng có ý nghĩa đặc biệt đã thay đổi một chút với mỗi lần sửa đổi các thông số kỹ thuật chi phối URI và lược đồ URI

Các ký tự khác trong URI phải được mã hóa theo phần trăm

Các ký tự dành riêng [ chỉnh sửa ]

Khi một ký tự từ tập dành riêng ["ký tự dành riêng"] có ý nghĩa đặc biệt ["mục đích dành riêng"] trong một ngữ cảnh nhất định và lược đồ URI nói rằng cần sử dụng ký tự đó cho một số mục đích khác, thì . Mã hóa phần trăm một ký tự dành riêng liên quan đến việc chuyển đổi ký tự thành giá trị byte tương ứng của nó trong ASCII, sau đó biểu thị giá trị đó dưới dạng một cặp chữ số thập lục phân [nếu có một chữ số thập lục phân, một số 0 đứng đầu sẽ được thêm vào]. Các chữ số, trước dấu phần trăm [%] làm ký tự thoát, sau đó được sử dụng trong URI thay cho ký tự dành riêng. [Đối với một ký tự không phải ASCII, nó thường được chuyển đổi thành chuỗi byte của nó trong UTF-8, sau đó mỗi giá trị byte được biểu diễn như trên. ]

Ví dụ: ký tự dành riêng /, nếu được sử dụng trong thành phần "đường dẫn" của URI, có ý nghĩa đặc biệt là nằm giữa các đoạn đường dẫn. Nếu, theo sơ đồ URI nhất định, / cần phải nằm trong một đoạn đường dẫn, thì ba ký tự %2F hoặc %2f phải được sử dụng trong đoạn đó thay vì một ký tự thô /

Reserved characters after percent-encoding!#%0%1%2%3%4%5%6%7%8%9/0/1/2/3/4/5/6/7/8/9/0/1/2/3/4/5/6/7/8%2F%2F0%2F1%2F2%2F3%2F4%2F5%2F6

Các ký tự dành riêng không có mục đích dành riêng trong một ngữ cảnh cụ thể cũng có thể được mã hóa theo phần trăm nhưng không khác biệt về mặt ngữ nghĩa so với các ký tự không

Ví dụ: trong thành phần "truy vấn" của URI [phần sau ký tự %2F7], / vẫn được coi là ký tự dành riêng nhưng nó thường không có mục đích dành riêng, trừ khi một lược đồ URI cụ thể quy định khác. Ký tự không cần được mã hóa theo phần trăm khi nó không có mục đích dành riêng

Các URI chỉ khác nhau ở chỗ một ký tự dành riêng được mã hóa theo phần trăm hay xuất hiện theo nghĩa đen thường được coi là không tương đương [biểu thị cùng một tài nguyên] trừ khi có thể xác định rằng các ký tự dành riêng được đề cập không có mục đích dành riêng. Quyết định này phụ thuộc vào các quy tắc được thiết lập cho các ký tự dành riêng theo các sơ đồ URI riêng lẻ

Các ký tự không được bảo vệ [ chỉnh sửa ]

Các ký tự từ tập hợp không được đặt trước không bao giờ cần được mã hóa theo phần trăm

Các URI chỉ khác nhau ở chỗ một ký tự không được đặt trước được mã hóa theo phần trăm hay xuất hiện theo nghĩa đen là tương đương theo định nghĩa, nhưng trên thực tế, các bộ xử lý URI có thể không phải lúc nào cũng nhận ra sự tương đương này. Ví dụ: người tiêu dùng URI không nên đối xử khác với %2F9 so với %2f0 hoặc %2f1 với %2f2, nhưng một số người thì lại làm như vậy. Để có khả năng tương tác tối đa, các nhà sản xuất URI không khuyến khích các ký tự không được mã hóa phần trăm

Ký tự phần trăm[sửa]

Vì ký tự phần trăm [ % ] đóng vai trò là chỉ báo cho các octet được mã hóa phần trăm, nên nó phải được mã hóa phần trăm thành /1 để octet đó được sử dụng làm dữ liệu trong URI

Dữ liệu tùy ý[sửa]

Hầu hết các sơ đồ URI liên quan đến việc biểu diễn dữ liệu tùy ý, chẳng hạn như địa chỉ IP hoặc đường dẫn hệ thống tệp, dưới dạng các thành phần của URI. Các đặc tả lược đồ URI nên, nhưng thường không, cung cấp ánh xạ rõ ràng giữa các ký tự URI và tất cả các giá trị dữ liệu có thể được biểu thị bằng các ký tự đó

Dữ liệu nhị phân[sửa]

Kể từ khi xuất bản RFC 1738 vào năm 1994, người ta đã chỉ định rằng các sơ đồ cung cấp biểu diễn dữ liệu nhị phân trong URI phải chia dữ liệu thành các byte 8 bit và mã hóa phần trăm mỗi byte theo cách tương tự như trên. Ví dụ: giá trị byte 0x0F phải được biểu thị bằng %2f5, nhưng giá trị byte 0x41 có thể được biểu thị bằng %2f0 hoặc %2F9. Việc sử dụng các ký tự không được mã hóa cho chữ và số và các ký tự không được đặt trước khác thường được ưu tiên hơn vì nó dẫn đến các URL ngắn hơn

Dữ liệu nhân vật[sửa]

Quy trình mã hóa phần trăm dữ liệu nhị phân thường được ngoại suy, đôi khi không phù hợp hoặc không được chỉ định đầy đủ, để áp dụng cho dữ liệu dựa trên ký tự. Trong những năm hình thành của World Wide Web, khi xử lý các ký tự dữ liệu trong danh mục ASCII và sử dụng các byte tương ứng của chúng trong ASCII làm cơ sở để xác định các chuỗi được mã hóa phần trăm, phương pháp này tương đối vô hại; . Tuy nhiên, nhu cầu biểu diễn các ký tự bên ngoài phạm vi ASCII đã tăng lên nhanh chóng và các lược đồ và giao thức URI thường không cung cấp các quy tắc chuẩn để chuẩn bị dữ liệu ký tự để đưa vào URI. Do đó, các ứng dụng web bắt đầu sử dụng các mã hóa nhiều byte, trạng thái và không tương thích với ASCII khác làm cơ sở cho mã hóa phần trăm, dẫn đến sự mơ hồ và khó diễn giải các URI một cách đáng tin cậy

Ví dụ: nhiều lược đồ và giao thức URI dựa trên RFC 1738 và 2396 giả định rằng các ký tự dữ liệu sẽ được chuyển đổi thành byte theo một số mã hóa ký tự không xác định trước khi được biểu diễn trong URI bằng các ký tự không được đặt trước hoặc byte được mã hóa phần trăm. Nếu lược đồ không cho phép URI cung cấp gợi ý về mã hóa nào đã được sử dụng hoặc nếu mã hóa xung đột với việc sử dụng ASCII để mã hóa phần trăm các ký tự dành riêng và không dành riêng, thì URI không thể được diễn giải một cách đáng tin cậy. Một số lược đồ hoàn toàn không tính đến việc mã hóa và thay vào đó chỉ đề xuất rằng các ký tự dữ liệu ánh xạ trực tiếp tới các ký tự URI, điều này khiến việc triển khai quyết định xem và cách mã hóa phần trăm các ký tự dữ liệu không nằm trong các bộ dành riêng hoặc không dành riêng

Common characters after percent-encoding [ASCII or UTF-8 based]%2f8%2f9/0%1/2/3/4/5/6/7/8/90123456 or 7 or 8/7!0/1!2!3!4!5!6!7!8!9#0#1#2%2f1#4#5

Dữ liệu ký tự tùy ý đôi khi được mã hóa theo phần trăm và được sử dụng trong các tình huống không phải URI, chẳng hạn như đối với các chương trình mã hóa mật khẩu hoặc các giao thức dịch thuật dành riêng cho hệ thống khác

Tiêu chuẩn hiện tại[sửa | sửa mã nguồn]

Cú pháp URI chung khuyến nghị rằng các lược đồ URI mới cung cấp biểu diễn dữ liệu ký tự trong URI, trên thực tế, sẽ biểu thị các ký tự từ tập hợp không được đặt trước mà không cần dịch và phải chuyển đổi tất cả các ký tự khác thành byte theo UTF-8, sau đó là phần trăm . Đề xuất này được giới thiệu vào tháng 1 năm 2005 với việc xuất bản RFC 3986. Lược đồ URI được giới thiệu trước ngày này không bị ảnh hưởng

Không được giải quyết theo thông số kỹ thuật hiện tại là phải làm gì với dữ liệu ký tự được mã hóa. Ví dụ: trong máy tính, dữ liệu ký tự hiển thị ở dạng được mã hóa, ở một mức độ nào đó và do đó có thể được coi là dữ liệu nhị phân hoặc ký tự khi được ánh xạ tới ký tự URI. Có lẽ, tùy thuộc vào các đặc tả sơ đồ URI để tính đến khả năng này và yêu cầu cái này hay cái kia, nhưng trên thực tế, rất ít, nếu có, thực sự làm

Triển khai không chuẩn [ chỉnh sửa ]

Tồn tại một mã hóa không chuẩn cho các ký tự Unicode. #6, trong đó xxxx là đơn vị mã UTF-16 được biểu thị dưới dạng bốn chữ số thập lục phân. Hành vi này không được chỉ định bởi bất kỳ RFC nào và đã bị W3C từ chối. Phiên bản thứ 13 của ECMA-262 vẫn bao gồm hàm #7 sử dụng cú pháp này, áp dụng mã hóa UTF-8 cho một chuỗi, sau đó thoát phần trăm các byte kết quả

Khi dữ liệu đã được nhập vào biểu mẫu HTML được gửi, tên và giá trị của trường biểu mẫu được mã hóa và gửi đến máy chủ trong thông báo yêu cầu HTTP bằng phương thức hoặc POST hoặc theo lịch sử là qua email. Mã hóa được sử dụng theo mặc định dựa trên phiên bản đầu tiên của quy tắc mã hóa phần trăm URI chung, với một số sửa đổi như chuẩn hóa dòng mới và thay thế khoảng trắng bằng #8 thay vì /7. Loại phương tiện của dữ liệu được mã hóa theo cách này là application/x-www-form-urlencoded và nó hiện được xác định trong thông số kỹ thuật HTML và XForms. Ngoài ra, đặc tả CGI chứa các quy tắc về cách máy chủ web giải mã dữ liệu thuộc loại này và cung cấp dữ liệu đó cho các ứng dụng

Khi dữ liệu biểu mẫu HTML được gửi trong một yêu cầu HTTP GET, nó sẽ được bao gồm trong thành phần truy vấn của URI yêu cầu bằng cách sử dụng cùng một cú pháp được mô tả ở trên. Khi được gửi trong một yêu cầu POST HTTP hoặc qua email, dữ liệu được đặt trong phần nội dung của thư và application/x-www-form-urlencoded được bao gồm trong tiêu đề Loại nội dung của thư

Xem thêm [sửa]

Tài liệu tham khảo [ chỉnh sửa ]

  1. RFC 1738 §2. 2; . 4; . 2. 1, 2. 1, 2. 5
  2. "Đặc tả ngôn ngữ ECMAScript 2017 [ECMA-262, ấn bản thứ 8, tháng 6 năm 2017]". Ecma quốc tế
  3. Hỗ trợ tác nhân người dùng để gửi biểu mẫu HTML dựa trên email, sử dụng URL 'mailto' làm hành động biểu mẫu, đã được đề xuất trong RFC 1867 phần 5. 6, trong HTML 3. 2 thời đại. Nhiều trình duyệt web đã triển khai nó bằng cách gọi một chương trình email riêng hoặc sử dụng các khả năng SMTP thô sơ của riêng chúng. Mặc dù đôi khi không đáng tin cậy, nhưng nó đã phổ biến trong một thời gian ngắn như một cách đơn giản để truyền dữ liệu biểu mẫu mà không cần đến máy chủ web hoặc tập lệnh CGI

Tất cả các thông số kỹ thuật sau đây thảo luận và xác định các ký tự dành riêng, ký tự không dành riêng và mã hóa phần trăm, ở dạng này hay dạng khác

Làm cách nào để mã hóa URL trong HTML?

Mã hóa URL . Trong mã hóa URL, các ký tự không phải ASCII được thay thế bằng "%" theo sau là các chữ số thập lục phân . URL không thể chứa khoảng trắng. Mã hóa URL thường thay thế khoảng trắng bằng dấu cộng [+] hoặc %20.

%E2 trong URL là gì?

%E2%80%8B là mã cho ký tự " ZERO-WIDTH SPACE ".

%22 trong HTML là gì?

Trình duyệt của bạn sẽ mã hóa đầu vào, theo bộ ký tự được sử dụng trong trang của bạn. Bộ ký tự mặc định trong HTML5 là UTF-8. . Tham chiếu mã hóa ASCII

%20 trong URL là gì?

Mã hóa URL từ %00 đến %8f

Chủ Đề