2013-07-29 3 views
10

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

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

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

The character encoding was not declared. Proceeding using windows-1252.

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

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

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

+3

Что заставляет вас думать, что браузер предполагает UTF-8, когда не указана кодировка? О каких «резервных правилах» вы имеете в виду? –

+0

Работает ли кодировка окон-1252? – pattyd

+0

Интересно ... ваш пример html показан как html5/utf8, когда я вставляю его в проверку с помощью прямого окна ввода – WebChemist

ответ

5

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

wikipedia

If a user agent reads a document with no character encoding information, it can fall back to using some other information. For example, it can rely on the user's settings, either browser-wide or specific for a given document, or it can pick a default encoding based on the user's language. For Western European languages, it is typical and fairly safe to assume Windows-1252, which is similar to ISO-8859-1 but has printable characters in place of some control codes.

2

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

The validator checked your document with an experimental feature: HTML5 Conformance Checker. This feature has been made available for your convenience, but be aware that it may be unreliable, or not perfectly up to date with the latest development of some cutting-edge technologies.

Так принять некоторые результаты с щепоткой соли ,

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

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

+0

Режим «прямого ввода», на который ссылается OP, будет «автоматически делать данные UTF-8» и «игнорировать любую информацию о кодировке». Смотрите мой комментарий к Кампари. –

+0

Справедливая точка. Хотя он не строго «игнорирует любую информацию о кодировке», поскольку он изменяет мета-кодировку, если она не является utf-8 (и помещает кодировку, предоставленную пользователем в код комментария HTML) – James

6

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

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

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

<meta charset="UTF-8"> 

внутри в head element.

+0

Режим прямого ввода не зависит от навигатора.На странице проверки: «В отличие от режимов« по URI »и« по загрузке файлов »режим« Прямой ввод »валидатора обеспечивает проверенное содержимое в виде символов, вставленных или введенных в поле формы проверки. Это автоматически сделает данные UTF-8, и поэтому валидатор не должен определять кодировку символов вашего документа и будет игнорировать любую информацию о кодировке ». –

1

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

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

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

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

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

Смежные вопросы