Метатип документа и специальный режим

Пожалуйста, могу ли я прояснить некоторые мысли здесь:

Quirksmode вызывается, если тип документа не указан.

но

При обслуживании с локального хоста IE переходит в режим quirksmode независимо от типа документа. Пожалуйста, это может быть подтверждено, и может ли кто-нибудь объяснить, почему это так.

Однако

Когда IE обслуживается с локального хоста и IE переходит в специальный режим независимо от типа документа, это можно переопределить, включив метатег в первую строку заголовка.

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Это не работает для меня ... я ошибся в синтаксисе?

Мета в голове будет применяться только при обслуживании с локального хоста? Так ли это, если да, то почему.

На данный момент все выглядит нормально в FF Chrome Opera и т. Д., Независимо от того, обслуживается ли он с локального хоста или через сеть.

Но я просто получаю режим причуд в IE

Мой тип документа

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Наконец, есть ли связь между charset и quirksmode?

я использовал

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

В apache с конфигурацией apache, установленной по умолчанию на UTF-8


person codepuppy    schedule 21.11.2012    source источник
comment
Как вы проверили, работает ли он в режиме причуд? Вы проверили свой XHTML? Это абсолютно необходимо для XHTML.   -  person MarioDS    schedule 21.11.2012
comment
Вы также указываете, что ваш контент = text/html, W3 заявляет, что это не подходит для XHTML-документы   -  person MarioDS    schedule 21.11.2012
comment
Ах хорошо. Я использовал инструменты разработчика IE, которые показывают режим quirksmode.   -  person codepuppy    schedule 22.11.2012


Ответы (4)


Режим Quirks причудлив, и вам не следует полагаться на что-то конкретное в отношении Это. Ситуации, в которых он запускается, зависят от браузера, но если вы видели тип документа XHTML, соответствующий спецификациям XHTML, для его запуска, то, вероятно, это ошибка в наблюдениях. У вас может быть, например. кое-что перед типом документа. То же самое для волшебного тега meta в отношении IE.

У вас может быть неправильный синтаксис, но не в опубликованных фрагментах.

Или проблема может быть вызвана некоторыми сложностями IE8 и IE9 при анализе типов документов.

Нет никакой связи между набором символов и Quirks Mode.

person Jukka K. Korpela    schedule 21.11.2012
comment
Хорошо, я запутался здесь. Не все может быть первой строкой кода. Я использую перенаправление с буферизацией, поэтому моя инициализация php может быть не в первой строке. Могу ли я подтвердить, что вы говорите, что тип документа должен быть впереди любых включений? то же самое мета - person codepuppy; 22.11.2012
comment
@codepuppy, нет, директивы PHP являются внутренними для сервера. Они не отправляются браузерам, поэтому они не влияют на выбор браузером режима, за исключением косвенного случая, когда директива создает некоторый контент в документе. - person Jukka K. Korpela; 22.11.2012
comment
@codepuppy, если ваш файл начинается с директивы PHP и вы открываете файл локально из файла, тогда директива появится в документе так, как ее видит браузер, и все испортит. Если вы имели в виду, что вы открываете его с http-сервера, работающего локально в вашей системе (localhost/...), тогда, возможно, этот сервер отличается от веб-сервера (возможно, PHP отключен?). - person Jukka K. Korpela; 22.11.2012
comment
Я имел в виду последнее. Оба сервера apache. PHP включен на обоих. - person codepuppy; 22.11.2012
comment
@codepuppy, возможно, серверы все еще ведут себя по-разному; используйте View Source в браузере, чтобы увидеть, есть ли разница. - person Jukka K. Korpela; 22.11.2012

Две вещи, вы можете попробовать IE=8 и т.д....

Вы также можете проверить doctype; хотя это выглядит правильно, у вас могут быть скрытые символы и т. д. Попробуйте использовать простой редактор, который покажет скрытые символы.

Для VI вы можете посмотреть: http://www.chrispian.com/quick-vi-tip-show-hidden-characters/.

Это будет для меня первым шагом.

person msj121    schedule 21.11.2012

Краткий ответ

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

Вот где что-то идет не так, потому что вы говорите, что это text/html, а ваш тип документа - xhtml. Вы должны использовать application/xhtml+xml.

Более длинный ответ

Мне кажется, что вы недостаточно изучили, что такое XHTML на самом деле. Это очень странный вид документа. Предполагалось, что XHTML станет усовершенствованием традиционного HTML, но он так и не стал популярным, и, как правило, его не рекомендуется использовать, если у вас нет особых причин.

Взгляните на этот веб-сайт. Некоторые важные разделы:

XHTML 1.1

Для версии 1.1 XHTML спецификации ясны: text/html НЕ МОЖЕТ использоваться. СЛЕДУЕТ использовать «собственный» тип контента XHTML application/xhtml+xml, в то время как общий тип контента XML application/xml МОЖЕТ использоваться.

Этот набор типов контента дает нам довольно четкий план действий для версии 1.1: если мы используем XHTML 1.1 2, мы должны использовать application/xhtml+xml в качестве типа контента.

А вот конкретно ваша проблема:

Ужас! Ужас!

Вы угадали. Предоставление документа, содержащего то, что во всех смыслах и целях является XHTML, в виде text/html просто означает, что браузеры перейдут в режим исправления ошибок и разберутся.

person MarioDS    schedule 21.11.2012
comment
Этот ответ совершенно неверен — извините! Комментарии слишком короткие, чтобы объяснять их подробно, но использование application/xhtml+xml приведет к поломке вашей страницы в большинстве IE и приведет к тому, что она не будет отображаться в других браузерах, если у вас вообще возникнут какие-либо ошибки. XHTML1.1 по существу не поддерживается и не должен использоваться. XHTML1.0 бесполезен по причинам, которые вы затронули. codepuppy должен следить за тем, чтобы перед типом документа не было новых строк, и в идеале использовать строку HTML5, чтобы свести к минимуму вероятность ошибок. - person Rich Bradshaw; 21.11.2012
comment
Ну, я бы не сказал, что не исследовал это, потому что я это сделал, но, может быть, мне не хватает понимания. Я выбрал xhtml, чтобы убедиться, что я придерживаюсь стандартов. Причина включения метаданных кодировки заключалась в том, чтобы удалить ошибку кодировки, которую я получал в FF. т.е. он требовал UTF-8. Итак, если я правильно понимаю, между набором символов и режимом причуды нет никакой связи, кроме синтаксиса, который я использовал, конфликтует с типом документа, из-за чего браузер по умолчанию использует режим причуды. . @Богатый - person codepuppy; 22.11.2012
comment
Я действительно отметил тип документа html 5. Я прочитал несколько сообщений об этом. Мне было неясно, является ли это обратной совместимостью. Казалось бы, здесь есть ответ... т. е. так оно и есть. @Богатый - person codepuppy; 22.11.2012
comment
Идея доктайпов довольно глупа, если подумать — зачем вам вообще нужен режим причуд? Тип документа HTML5 был разработан, чтобы быть кратчайшим кодом, который не запускает режим причуд (нет типа документа = причуды). XHTML оказался в тупике, отчасти потому, что IE его не поддерживал, а отчасти потому, что слишком легко сломать весь сайт (любой неверный XHTML 1.1 = отсутствие сайта). Используйте <meta charset="utf-8" /> для кодировки, но также убедитесь, что вы используете PHP/Ruby/Python для отправки заголовка, такого как Content-Type: text/html; charset=utf-8. Заголовок более важен для работы. - person Rich Bradshaw; 22.11.2012
comment
Кроме того, почти все в ответе Марио для вас не имеет значения. Вы не пытались использовать XHTML1.1, только старую версию 1.0, поэтому почти все не имеет отношения к вашей ситуации. - person Rich Bradshaw; 22.11.2012
comment
Да, действительно — это сообщение в блоге Джона Резига очень хорошо подводит итог ejohn.org/blog/html5. -doctype/#postcomment, в частности следующий комментарий: как я уже говорил, он просто переводит документ в стандартный режим. IE6 и IE7 будут игнорировать новые функции HTML 5 (наряду с Firefox и т. д.), но, по крайней мере, вы сможете развиваться в соответствии с существующими стандартами, глядя в будущее. Я надеюсь, что это поможет другим бороться с этим. - person codepuppy; 22.11.2012
comment
@Rich, чтобы уточнить В ДОПОЛНЕНИЕ к ‹meta charset=utf-8/› моя инициализация должна содержать ‹?php header(content-Type: text/html; charset=utf-8); ?› - person codepuppy; 22.11.2012
comment
Это один из способов сделать это. Убедитесь, что это произошло прежде всего. Вероятно, будет лучше, если ваш сервер (скажем, Apache) сделает это за вас. В Apache вы должны добавить AddDefaultCharset utf-8 в свой файл .htaccess. Этот github.com/h5bp/html5-boilerplate/blob/master/.htaccess — отличный справочник по настройке сервера высшего качества. (И весь проект содержит множество отличных ресурсов) - person Rich Bradshaw; 22.11.2012

Я хотел обобщить выводы из этого вопроса.

Чтобы отключить режим совместимости в IE9

  1. в IE 9 щелкните правой кнопкой мыши значок инструментов и выберите панель команд
  2. на панели команд выберите инструменты
  3. в инструментах выберите Параметры просмотра в режиме совместимости
  4. снимите флажок отображать сайт интрасети в режиме совместимости
  5. на панели команд выберите инструменты, убедитесь, что просмотр совместимости не отмечен
  6. Перезапустите браузер

Основные моменты смены кода

  • Тип документа HTML 5 упрощает всю проблему установки типа документа.
  • Причиной того, что между charset и quirksmode возникла связь, была ошибка в мета, чтобы добавить этот charset, что привело к конфликту с doctype.

Итак, действия завершены для решения проблемы.

  1. Игнорировать quirksmode локального хоста — это имеет значение только при тестировании.
  2. Используйте <!Doctype html>, чтобы html-документ начинался с этого. N:B это не означает, что это должна быть первая строка HTML. php include может предшествовать ему.

  3. В <head> Используйте <meta charset="UTF-8">

  4. При инициализации php используйте <?php header("content-Type: text/html; charset=utf-8"); ?>
person codepuppy    schedule 22.11.2012