2011-03-28 6 views
5

Supponiamo che un browser incontra un tag <meta> che specifica la codifica dei caratteri, in questo modo:In che modo i browser gestiscono il tag <meta> che specifica la codifica dei caratteri?

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

Lo fa iniziare da capo parsing nuovamente la pagina, dal momento che alcuni dei caratteri che precedono nella sezione <head> può avere stato interpretato in modo errato? O ci sono altri vincoli che impediscono l'interpretazione errata dei caratteri precedenti?

risposta

4

Per quanto ne so, i browser non andrà di nuovo dopo aver trovato una dichiarazione charset nel <head> e assumono un set di caratteri ASCII compatibile fino a quel punto. Purtroppo non riesco a trovare un riferimento per confermare questo.

La conferma dei browser ignorerà un meta elemento Content-Type, se il server fornisce già un'intestazione HTTP Content-Type, quindi non è possibile sovrascrivere un set di caratteri lato server "errato" con un elemento <meta>.

Il punto per la dichiarazione di set di caratteri <meta> è per i documenti HTML che non sono server da un server HTTP.

Ciò significa che non si deve fare affidamento su una dichiarazione di set di caratteri <meta> nel file HTML, ma configurare il server HTTP per fornire il set di caratteri corretto. Se per qualche motivo devi fare affidamento su una dichiarazione di set di caratteri <meta>, dovresti avere solo caratteri ASCII fino a quel punto e posizionarlo il più presto possibile nello <head>, preferibilmente come primo elemento.

+1

Grazie, ho trovato un riferimento per" assumere un set di caratteri ASCII compatibile fino a quel punto ". È a (sorpresa!) W3C: http://www.w3.org/TR /html4/charset.html#h-5.2.2 Un buon consiglio per il posizionamento del tag, se necessario –

0

Non ha alcun effetto sulla struttura del nodo. Solo il contenuto dei nodi di testo (e dei nodi degli attributi) deve essere transcodificato.

Se il server invia il

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

... Header il browser saprà il charset fin dall'inizio. È possibile acieve THS con un file .htaccess contenente:

AddDefaultCharset utf-8 
+0

Ma presumibilmente può succedere che il meta tag specifichi un set di caratteri diverso da quello nell'intestazione 'Content-type', altrimenti non sembra esserci alcun punto nell'utilizzo del meta tag per questo. E anche se i nodi dei documenti non devono essere nuovamente analizzati, non è ancora possibile ottenere qualcosa di sbagliato nella parte precedente della sezione ''? (ad es. un valore stringa in alcuni Javascript ") –

1

Il parser può iniziare in alcune circostanze. Le specifiche rilevanti sono qui: http://dev.w3.org/html5/spec/parsing.html#change-the-encoding

Nota che i browser per tradizione probabilmente non hanno seguito esattamente questo algoritmo; è probabile che abbiano fatto cose leggermente diverse. Tuttavia, il collegamento sopra riportato descrive cosa devono fare i browser conformi a HTML5. L'algoritmo descritto è probabilmente un amalgama di vari browser precedenti comportamenti.

Poiché HTML5 è ancora un progetto di lavoro, questo dovrebbe essere considerato soggetto a modifiche.

+0

+1 Interessante, suppongo che questo sia nuovo in HTML5 –

+0

@Joel - La standardizzazione dell'algoritmo è nuova in HTML5, sì. – Alohci