2011-03-28 18 views
5

Supongamos que un navegador encuentra una etiqueta <meta> que especifica la codificación de caracteres, así:¿Cómo manejan los navegadores la etiqueta <meta> que especifica la codificación de caracteres?

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

lo hace empezar de nuevo desde el principio de análisis de la página de nuevo, ya que algunos de los personajes anteriores en la sección <head> pueden tener sido interpretado incorrectamente? ¿O existen algunas otras restricciones que impiden que los caracteres anteriores se interpreten de manera incorrecta?

Respuesta

4

Por lo que yo sé, los navegadores no pienso volver después de encontrar una declaración en el juego de caracteres <head> y asumen un conjunto de caracteres ASCII compatibles hasta ese momento. Desafortunadamente no puedo encontrar una referencia para confirmar esto.

La confirmación de los navegadores ignorará un meta elemento de tipo Content, si el servidor ya proporciona un encabezado HTTP Content-Type, por lo que no puede anular un conjunto de caracteres del servidor "incorrecto" con un elemento <meta>.

El punto para la declaración del juego de caracteres <meta> es para documentos HTML que no son servidores por un servidor HTTP.

Eso significa que no debe confiar en una declaración de juego de caracteres <meta> en el archivo HTML, pero configure su servidor HTTP para proporcionar el juego de caracteres correcto. Si por alguna razón tiene que confiar en una declaración del juego de caracteres <meta>, solo debe tener caracteres ASCII hasta ese punto y colocarlo lo más temprano posible en el <head>, preferiblemente como el primer elemento.

+1

Gracias. Encontré una referencia sobre" asumir un conjunto de caracteres ASCII compatible hasta ese momento. "Está en (¡sorpresa!) W3C: http://www.w3.org/TR /html4/charset.html#h-5.2.2. Un buen consejo con respecto a la colocación de la etiqueta, si es necesario. –

0

No tiene ningún efecto real en la estructura del nodo. Solo el contenido de los nodos de texto (y los nodos de atributo) debe ser transcodificado.

Si el servidor envía la

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

... cabecera del navegador sabrá el juego de caracteres desde el principio. Puede acieve THS con un archivo .htaccess que contiene:

AddDefaultCharset utf-8 
+0

Pero, presumiblemente, puede suceder que la metaetiqueta especifique un juego de caracteres diferente al del encabezado 'Content-type'; de lo contrario, no parece ser necesario utilizar la metaetiqueta para esto. Y aunque no es necesario volver a analizar los nodos de documento, ¿no podría haber obtenido algo erróneo en la parte anterior de la sección ''? (por ejemplo, un valor de cadena en algún Javascript "). –

1

El analizador puede empezar de nuevo en algunas circunstancias. La especificación relevante está aquí: http://dev.w3.org/html5/spec/parsing.html#change-the-encoding

Tenga en cuenta que los navegadores tradicionalmente probablemente no hayan seguido este algoritmo exactamente; es probable que hayan hecho cosas ligeramente diferentes. Sin embargo, el enlace anterior describe qué deberían hacer los navegadores compatibles con HTML5. El algoritmo descrito es probablemente una amalgama de comportamiento anterior de varios navegadores.

Dado que HTML5 sigue siendo un borrador en funcionamiento, esto debe considerarse sujeto a cambios.

+0

+1 Interesante. Considero que esto es nuevo en HTML5. –

+0

@Joel - La estandarización del algoritmo es nueva en HTML5, sí. – Alohci

Cuestiones relacionadas