2012-12-28 19 views
8

Czy prawidłowy kod HTML używa identyfikatorów IRI zawierających znaki spoza ASCII jako wartości atrybutów (np. Dla atrybutów href) zamiast identyfikatorów URI? Czy są jakieś różnice między smakami HTML (HTML i XHTML, 4 i 5)? Co najmniej RFC 3986 wydaje się sugerować, że tak nie jest.Czy identyfikatory IRI są prawidłowe jako wartości atrybutów HTML?

Zdaję sobie sprawę, że prawdopodobnie będzie bezpieczniejsze (w przypadku starszych i nieświadomych oprogramowania IRI) stosowanie kodowania procentowego, ale szukam ostatecznej odpowiedzi w odniesieniu do standardu.

Do tej pory zrobiłem kilka testów z W3C validator, a nieodwzorowane znaki Unicode w identyfikatorach URI nie wyzwalają żadnych ostrzeżeń ani błędów z dokumentami typu 4/5 i XHTML 4/5 (ale oczywiście brak błędu wiadomości nie oznacza braku błędów).

Co najmniej chrome obsługuje również surowe IRI UTF-8, ale procent-ucieka je przed wystrzeleniem żądania HTTP. Również mój serwer WWW (lighttpd) wydaje się obsługiwać znaki UTF-8 w ich procencie zakodowanym, jak również w postaci nieskodowanej w żądaniu HTTP.

+0

Uwaga: [Sekcja 1.2 dokumentu RFC 3987] (http://tools.ietf.org/html/rfc3987#section-1.2) wspomina o tym, że HTTP zdefiniowano w [RFC 2616] (http: //tools.ietf. org/html/rfc2616) robi ** NOT ** wspiera IRIs, więc obsługa ich jest poza standardem. Ty (lub twoja przeglądarka lub ktoś) musisz najpierw odwzorować dany IRI na URI, zanim spróbujesz odzyskać przywoływany zasób. – Oliver

+0

możliwy duplikat [znaków Unicode w adresach URL] (http://stackoverflow.com/questions/2742852/unicode-characters-in-urls) –

Odpowiedz

6

HTML 4.01 jest wystarczająco prosty. Różne atrybuty mają różne zasady co do czego mogą zawierać, ale jeśli mamy do czynienia z atrybutem href na elemencie <a>, wówczas HTML 4 spec, section B.2.1 Non-ASCII characters in URI attribute values mówi:

... następująca wartość href jest nielegalne:

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

HTML5 jest inna. Mówi IRIs are valid providing they comply with some additional conditions.

URL jest prawidłowy adres URL, jeśli co najmniej jeden z następujących warunków posiada:

  • URL jest prawidłowy odnośnik URI [RFC3986].

  • Adres URL jest prawidłowym numerem referencyjnym IRI i nie zawiera składnika zapytania. [RFC3987]

  • Adres URL to poprawne odwołanie IRI, a jego element zapytania nie zawiera znaków ASCII bez znaków kontrolnych. [RFC3987]

  • Adres URL to poprawne odwołanie IRI, a kodowanie znaków dokumentu URL to UTF-8 lub kodowanie UTF-16. [RFC3987]

XHTML 1.x zastosowanie te same zasady jak HTML 4.01.

XHTML5 jest taki sam jak HTML5.

2

W razie wątpliwości należy przeczytać oficjalne specyfikacje HTML, aby uzyskać ostateczne odpowiedzi.

HTML 4 nie obsługuje w ogóle IRI. Muszą być kodowany jako URI za RFC 3987 Section 3.1 lub kodowania dla danych ASCII URI w UTF-8 procent kodowania za HTML4 Section B.2.1

HTML 5 wymaga URI i tęczówki we wszystkich miejscach, w których dozwolony URL, za HTML5 Section 2.6.

Powiązane problemy