Почему этот документ HTML5 недействителен?

Я очень запутался в сообщении об ошибке, которое получаю, когда я пытаюсь проверить любой простой HTML-документ без мета-кодировки следующим образом:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>Test</body>
</html>

Валидатор W3C http://validator.w3.org неохотно принимает документ как действительный только с несколькими предупреждениями, когда он вставлен в форму прямого ввода, но когда документ загружен или загружается URI, проверка не выполняется с этим сообщением об ошибке

Кодировка символов не была объявлена. Продолжая использовать окна-1252.

Есть две вещи, которые я не понимаю об этой ошибке:

  • Почему недостающая кодировка символов считается ошибкой, когда существуют правила возврата?
  • Почему валидатор предполагает использование windows-1252 вместо UTF-8, как и любой браузер?

Может кто-нибудь объяснить эти два вопроса, пожалуйста? Я новичок в этом, поэтому, пожалуйста, несите меня.

Ответ 1

Ну, это зависит от того, что вы используете.

  • если вы используете опцию File Upload, это зависит от того, кодировка HTML файла была сохранена с помощью.
  • если вы используете опцию Direct Input, это зависит от навигатор.

Если вы не хотите, чтобы валидатор угадал, и используйте UTF-8, вы можете добавить следующую строку

<meta charset="UTF-8">

внутри элемента .

Ответ 2

Это режим "прямого ввода" валидатора, который по умолчанию использует UTF-8. Пользовательские агенты (браузеры) по умолчанию будут использовать другие кодировки, основанные на нескольких вещах:

wikipedia

Если пользовательский агент считывает документ без кодировки символов информации, он может вернуться к использованию какой-либо другой информации. Для Например, он может полагаться на пользовательские настройки, как в браузере, так и в браузере специфичный для данного документа, или он может выбирать кодировку по умолчанию на языке пользователя. Для западноевропейских языков это типично и довольно безопасно предположить Windows-1252, который похож на ISO-8859-1 но имеет печатные символы вместо некоторых управляющих кодов.

Ответ 3

Валидатор W3C сказал:

Валидатор проверил ваш документ с помощью экспериментальной функции: HTML5 Conformance Checker. Эта функция была сделана доступной для вашего удобства, но имейте в виду, что она может быть ненадежной или несовместимой с новейшей разработкой некоторых передовых технологий.

Так что сделайте несколько результатов с щепоткой соли.

Кроме того, нет полезной "откат", валидатор просто должен выбрать что-то/что угодно, чтобы он мог попытаться подтвердить для вас. W3C не может определить/решить, какую кодировку вы хотите/должны использовать. Вы должны объявить это самостоятельно, исходя из того, какие символы вам нужно использовать на своих веб-страницах, а затем попросите W3C проверить ваш документ на основе этого.

Какой редактор /WYSIWYG вы используете для создания веб-страниц? У нас есть URL-адрес, который вы пытаетесь проверить?

Ответ 4

Когда вы используете Validate by URI, сервер должен объявить кодировку символов в заголовках HTTP, точнее в параметре charset значения заголовка Content-Type. В этом случае, похоже, этого не происходит. Вы можете проверить ситуацию, например. используя Rex Swain HTTP Viewer.

В соответствии с разделом 4.2.5.5 Указание кодировки символов документа в HTML5 CR: "Если HTML-документ не начинается с спецификации и его кодировка явно не задана метаданными Content-Type, и документ не является документом iframe srcdoc, тогда используемая кодировка символов должна быть кодировкой символов, совместимой с ASCII, и кодировка должна быть указана с использованием мета-элемента с атрибутом charset или мета-элемент с атрибутом http-equiv в состоянии объявления кодирования". Это немного сложно, но в нижней строке: есть несколько способов объявить кодировку, но если ни один из них не используется, документ не соответствует требованиям.

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

Валидатор предполагает наличие окон-1252, потому что это приводит к тому, что приводит к правилам HTML5. Правила обработки находятся в 8.2.2.1 Определение кодировки символов. Они довольно сложны, но они в значительной степени отражают то, как делают современные браузеры (и ставят своей целью сделать его стандартом). Правила там также предназначены для обработки несоответствующих документов, но это не делает эти документы соответствующими; правила обработки ошибок на самом деле не являются "резервными", и на них не следует полагаться, тем более что старые браузеры не всегда играют по правилам.

Правила ошибок немного ослабляются, когда дело доходит до ситуации, когда все остальное терпит неудачу, и используется "кодировка символов по умолчанию, определяемая реализацией или пользователем". Есть только "предложения" о том, что могут делать браузеры (опять же, отражая то, что обычно делают современные браузеры), и это может включать использование "пользовательской локали", неясной концепции. Валидатор использует окна-1252, возможно, потому, что это значение по умолчанию для английского языка, а валидатор "говорит" по-английски, или, может быть, только потому, что его предположение должно быть правильным чаще, чем любая другая единственная альтернатива.