2012-12-28 44 views
8

HTML hợp lệ để sử dụng IRI có chứa các ký tự không phải ASCII làm giá trị thuộc tính (ví dụ: cho thuộc tính href) thay vì URI? Có bất kỳ sự khác biệt nào giữa các hương vị HTML (HTML và XHTML, 4 và 5) không? Ít nhất RFC 3986 dường như ngụ ý rằng nó không phải là.IRI có hợp lệ như các giá trị thuộc tính HTML không?

Tôi nhận ra rằng có lẽ sẽ an toàn hơn (liên quan đến phần mềm cũ và không biết) để sử dụng mã hóa phần trăm, nhưng tôi đang tìm câu trả lời cuối cùng liên quan đến tiêu chuẩn. Cho đến nay, tôi đã thực hiện một số thử nghiệm với W3C validator và các ký tự uniccaped unicode trong URI không kích hoạt bất kỳ cảnh báo hoặc lỗi nào với HTML 4/5 và XHTML 4/5 doctypes (nhưng tất nhiên là không có lỗi tin nhắn không ngụ ý sự vắng mặt của các lỗi).

Ít nhất Chrome cũng hỗ trợ IRI UTF-8 thô, nhưng phần trăm thoát chúng trước khi kích hoạt yêu cầu HTTP. Ngoài ra, máy chủ web của tôi (lighttpd) dường như hỗ trợ các ký tự UTF-8 trong phần trăm được mã hóa của chúng cũng như ở dạng không được mã hóa trong một yêu cầu HTTP.

+0

Hãy coi chừng [Mục 1.2 của RFC 3987] (http://tools.ietf.org/html/rfc3987#section-1.2) đề cập đến HTTP như được định nghĩa bởi [RFC 2616] (http: //tools.ietf. org/html/rfc2616) không ** KHÔNG ** hỗ trợ IRIs để xử lý chúng nằm ngoài tiêu chuẩn. Bạn (hoặc trình duyệt của bạn, hoặc ai đó) cần ánh xạ một IRI cụ thể tới một URI trước khi cố gắng truy xuất tài nguyên được tham chiếu. – Oliver

+0

bản sao có thể có của [Ký tự Unicode trong URL] (http://stackoverflow.com/questions/2742852/unicode-characters-in-urls) –

Trả lời

6

HTML 4.01 đủ đơn giản. thuộc tính khác nhau có những quy định khác nhau như những gì chúng có thể chứa, nhưng nếu chúng ta đang làm việc với các thuộc tính href trên một yếu tố <a> thì HTML 4 spec, section B.2.1 Non-ASCII characters in URI attribute values nói:

... giá trị href sau đây là bất hợp pháp:

<A href="http://foo.org/Håkon">...</A>

HTML5 khác. Nó nói IRIs are valid providing they comply with some additional conditions.

Một URL là URL hợp lệ khi có ít nhất một trong các điều kiện sau giữ:

  • URL là một URI tham chiếu hợp lệ [RFC3986].

  • URL là tham chiếu IRI hợp lệ và không có thành phần truy vấn. [RFC3987]

  • URL là tham chiếu IRI hợp lệ và thành phần truy vấn của nó không chứa ký tự không phải ASCII không thoát. [RFC3987]

  • URL là tham chiếu IRI hợp lệ và mã hóa ký tự của Tài liệu URL là UTF-8 hoặc mã hóa UTF-16. [RFC3987]

XHTML 1.x theo quy tắc tương tự như HTML 4.01.

XHTML5 giống với HTML5.

2

Khi nghi ngờ, hãy đọc các thông số kỹ thuật HTML chính thức cho các câu trả lời dứt khoát.

HTML 4 không hỗ trợ IRI. Họ phải được mã hóa như URI mỗi RFC 3987 Section 3.1, hoặc mã hóa dữ liệu phi ASCII URI như UTF-8 với mã hóa phần trăm mỗi HTML4 Section B.2.1

HTML 5 hỗ trợ cả các URI và IRI trong tất cả những nơi mà các URL được phép, mỗi HTML5 Section 2.6.