2011-03-28 15 views
5

Załóżmy przeglądarka napotka <meta> znacznik określający kodowania znaków, na przykład:W jaki sposób przeglądarki obsługują znacznik <meta>, który określa kodowanie znaków?

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 

Czy zacząć od początku jeszcze raz parsowania stronę, ponieważ niektóre z poprzednich znaków w sekcji <head> może mieć zostały niewłaściwie zinterpretowane? Czy istnieją też inne ograniczenia, które uniemożliwiają błędne interpretowanie wcześniejszych znaków?

Odpowiedz

4

O ile wiem, przeglądarek przyzwyczajenie wrócić po znalezieniu deklarację charset w <head> i zakładają kompatybilnego zestawu znaków ASCII do tego momentu. Niestety nie mogę znaleźć odniesienia, aby to potwierdzić.

Potwierdzające przeglądarki zignorują element typu Content-Type, jeśli serwer już udostępnia nagłówek HTTP Content-Type, więc nie można zastąpić "niewłaściwego" zestawu znaków po stronie serwera elementem <meta>.

Punkt dla deklaracji zestawu znaków dla <meta> dotyczy dokumentów HTML, które nie są serwerami przez serwer HTTP.

Oznacza to, że nie powinieneś polegać na deklaracji zestawu znaków <meta> w pliku HTML, ale skonfigurować swój serwer HTTP tak, aby dostarczał poprawny zestaw znaków. Jeśli z jakiegoś powodu musisz polegać na deklaracji zestawu znaków <meta>, powinieneś mieć tylko znaki ASCII do tego miejsca i umieszczać je tak wcześnie, jak to możliwe, najlepiej jako pierwszy element.

+1

Dzięki. Znalazłem odnośnik dotyczący" przyjmowania zestawu znaków zgodnego z ASCII do tego momentu. "To jest (niespodzianka!) W3C: http://www.w3.org/TR /html4/charset.html#h-5.2.2 Dobra rada dotycząca umieszczania tagu, jeśli jest to potrzebne –

0

Nie ma rzeczywistego wpływu na strukturę węzła. Tylko zawartość węzłów tekstowych (i węzłów atrybutów) musi być transkodowana.

Jeśli serwer wysyła

Content-type: text/html;charset=utf-8 

... header przeglądarki będą wiedzieć właściwą charset od początku. Można acieve tys z plikiem .htaccesszawierającego:

AddDefaultCharset utf-8 
+0

Prawdopodobnie może się zdarzyć, że metatag określa inny zestaw znaków niż ten w nagłówku 'Content-type', w przeciwnym razie nie ma sensu używać tego metatagu. I chociaż nie trzeba ponownie analizować węzłów dokumentów, czy mimo to nie udało ci się uzyskać czegoś złego w poprzedniej części sekcji ''? (np. wartość ciągu znaków w niektórych skryptach JavaScript ") –

1

Parser może zacząć od nowa w niektórych okolicznościach. Odpowiednia specyfikacja znajduje się tutaj: http://dev.w3.org/html5/spec/parsing.html#change-the-encoding

Należy zauważyć, że przeglądarki tradycyjnie prawdopodobnie nie przestrzegały dokładnie tego algorytmu; są szanse, że wszyscy zrobili trochę inne rzeczy. Jednak powyższy link opisuje, co powinny robić przeglądarki zgodne z HTML5. Opisany algorytm jest prawdopodobnie amalgamatem różnych wcześniejszych zachowań przeglądarki.

Ponieważ HTML5 jest nadal wersją roboczą, należy uznać, że może ulec zmianie.

+0

+1 Interesujące, uważam, że jest to nowe w HTML5 –

+0

@Joel - Standaryzacja algorytmu jest nowa w HTML5, tak. – Alohci

Powiązane problemy