Как браузеры обрабатывают тег <meta>, который определяет кодировку символов? - PullRequest
5 голосов
/ 28 марта 2011

Предположим, что браузер обнаружил тег <meta>, который определяет кодировку символов, например:

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

Начинается ли он заново с начала повторного анализа страницы, поскольку некоторые из предыдущих символов в разделе <head> могли быть неправильно интерпретированы? Или есть какие-то другие ограничения, препятствующие неправильной интерпретации предыдущих символов?

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

Насколько я знаю, браузеры не вернутся после нахождения объявления набора символов в <head>, и они предполагают, что ASCII-совместимая кодировка до этого момента.К сожалению, я не могу найти ссылку для подтверждения этого.

Подтверждение, что браузеры будут игнорировать метаэлемент Content-Type, если сервер уже предоставляет HTTP-заголовок Content-Type, поэтому вы не можете переопределить «неправильно»."серверная кодировка с элементом <meta>.

Смысл объявления кодировки <meta> предназначен для документов HTML, которые не являются серверами HTTP-сервером.

Это означает, что вы не должныне полагайтесь на объявление <meta> charset в файле HTML, но настройте свой HTTP-сервер для предоставления правильной кодировки.Если по какой-то причине вам нужно полагаться на объявление <meta> charset, вы должны иметь только символы ASCII до этой точки и располагать его как можно раньше в <head>, предпочтительно в качестве первого элемента.

1 голос
/ 28 марта 2011

Анализатор может запускаться при некоторых обстоятельствах.Соответствующая спецификация здесь: http://dev.w3.org/html5/spec/parsing.html#change-the-encoding

Обратите внимание, что браузеры традиционно, вероятно, не следовали этому алгоритму точно;Скорее всего, они все сделали немного разные вещи.Однако ссылка выше описывает, что должны делать браузеры, совместимые с HTML5.Описанный алгоритм, вероятно, представляет собой смесь предыдущих действий различных браузеров.

Поскольку HTML5 все еще является рабочим проектом, его следует учитывать.

0 голосов
/ 28 марта 2011

Реально не влияет на структуру узла. Только содержимое текстовых узлов (и узлов атрибутов) должно быть перекодировано.

Если ваш сервер отправляет

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

... header браузер с самого начала узнает правильную кодировку. Вы можете получить это с помощью файла .htaccess , содержащего:

AddDefaultCharset utf-8
...