2013-07-29 8 views
10

Ich bin ziemlich verwirrt über eine Fehlermeldung jede einfache HTML-Dokument ohne Meta-Codierung, wie diese erhalte ich, wenn ich versuche immer zu überprüfen: http://validator.w3.org ungern akzeptiert das Dokument als gültig mitWarum ist dieses HTML5-Dokument ungültig?

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

Der W3C-Validator nur ein paar Warnungen, wenn es in das Direkteingabeformular eingefügt wird, aber wenn das Dokument hochgeladen oder per URI geladen, schlägt die Validierung mit dieser Fehlermeldung

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

es gibt zwei Dinge, die ich nicht über diesen Fehler verstehen :

  • Warum wird eine fehlende Zeichencodierung als Fehler betrachtet, wenn Ersatzregeln existieren?
  • Warum nimmt der Validator Windows-1252 statt UTF-8 an, wie jeder Browser?

Kann jemand bitte diese zwei Punkte erklären? Ich bin ziemlich neu in diesem Zeug, also bitte bitte mit mir.

+3

Was lässt Sie vermuten, dass ein Browser UTF-8 annimmt, wenn keine Kodierung angegeben ist? Auf welche "Fallback-Regeln" beziehen Sie sich? –

+0

Funktioniert Windows-1252-Codierung obwohl? – pattyd

+0

Interessant ... Ihr HTML-Beispiel wird als html5/utf8 validiert, wenn ich es in das Fenster zur Validierung durch das direkte Eingabefenster einfüge – WebChemist

Antwort

5

Der Modus "Direct Input" des Validators ist standardmäßig auf UTF-8 eingestellt. User-Agents (Browser) wird auf der Grundlage einer Reihe von Dingen auf andere Codierungen Standard:

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-Validator sagte:

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.

So einige Ergebnisse nehmen mit einer Prise Salz .

Auch gibt es keinen nützlichen "Fallback", der Validator muss nur etwas auswählen, damit es für Sie validieren kann. W3C kann nicht bestimmen/entscheiden, welche Kodierung Sie verwenden möchten/müssen. Sie müssen es basierend auf den Zeichen, die Sie auf Ihren Webseiten bereitstellen müssen, selbst deklarieren und dann W3C auffordern, Ihr Dokument basierend darauf zu validieren.

Welchen Editor/WYSIWYG verwenden Sie, um Webseiten zu erstellen? Können wir die URL haben, die Sie zu validieren versuchen?

+0

Der "Direct Input" -Modus, auf den sich das OP bezieht, "erstellt automatisch die Daten UTF-8" und "ignoriert alle Zeichensatzinformationen". Siehe meinen Kommentar zu Campari. –

+0

Messepunkt. Es ignoriert zwar "keine Zeichensatzinformationen", ändert jedoch den bereitgestellten Metazeichensatz, wenn es nicht utf-8 ist (und platziert den vom Benutzer bereitgestellten Zeichensatz im HTML-Kommentarcode). – James

6

Nun, es hängt davon ab, was Sie verwenden.

  • , wenn Sie die File Upload Option verwenden, hängt davon ab, welche die Datei mit wurde die HTML-Codierung gespeichert. Wenn Sie die Option Direct Input verwenden, hängt dies vom Navigator ab.

Wenn Sie die Validierer und UTF-8 verwenden zu erraten, nicht möchten, können Sie die folgende Zeile

<meta charset="UTF-8"> 

in der der head element hinzuzufügen.

+0

Der Direkteingabe-Modus hängt nicht vom Navigator ab.Von der bestätigenden Seite: "Im Gegensatz zu den Modi" nach URI "und" nach Datei-Upload "bietet der Modus" Direct Input "des Validators validierte Inhalte in Form von Zeichen, die im Formularfeld des Validators eingefügt oder eingegeben werden Die Daten UTF-8, und daher muss der Validator nicht die Zeichencodierung Ihres Dokuments bestimmen und ignoriert alle angegebenen Zeichensatzinformationen. " –

1

Wenn Sie Validate by URI verwenden, soll der Server die Zeichencodierung in HTTP-Headern ankündigen, genauer im charset-Parameter des Content-Type-Headerwerts.In diesem Fall passiert das anscheinend nicht. Sie können die Situation z. mit Rex Swain's HTTP Viewer.

Gemäß Klausel 4.2.5.5 Specifying the document's character encoding in HTML5 CR, "Wenn ein HTML-Dokument nicht mit einer Stückliste beginnt, und seine Codierung nicht explizit von Content-Type-Metadaten angegeben wird, und das Dokument ist kein iframe srcdoc Dokument, dann das Zeichen Die verwendete Codierung muss eine ASCII-kompatible Zeichencodierung sein, und die Codierung muss mithilfe eines Meta-Elements mit einem charset-Attribut oder einem Meta-Element mit einem http-equiv-Attribut im Encoding-Deklarationsstatus angegeben werden. "Dies ist ein wenig kompliziert, aber die Die untere Zeile lautet: Es gibt mehrere Möglichkeiten, die Codierung zu deklarieren, aber wenn keine davon verwendet wird, ist das Dokument nicht konform.

Warum es angibt, so ist etwas spekulativ, aber die allgemeine Idee ist, dass solche Regeln Zuverlässigkeit und Robustheit fördern. Wenn die Regel nicht befolgt wird, verwenden verschiedene Browser möglicherweise andere Standardeinstellungen oder Schätzwerte.

Der Validator geht von Windows-1252 aus, weil das die HTML5-Regeln sind. Die Verarbeitungsregeln sind in 8.2.2.1 Determining the character encoding. Sie sind ziemlich kompliziert, aber sie spiegeln weitgehend die Art wider, wie moderne Browser dies tun (und darauf abzielen, es zu einem Standard zu machen). Die dortigen Regeln sollen auch mit nicht konformen Dokumenten umgehen, aber dies macht diese Dokumente nicht konform; Fehlerverarbeitungsregeln sind nicht wirklich "Fallbacks" und sollten nicht verlässlich sein, zumal sich alte Browser nicht immer an die Regeln halten.

Die Fehlerregeln werden etwas gelockert, wenn alles andere fehlschlägt und eine "implementierungsdefinierte oder benutzerdefinierte Standardzeichencodierung" verwendet werden soll. Es gibt nur "Vorschläge" zu dem, was Browser tun könnten (was wiedergibt, was moderne Browser im Allgemeinen tun), und dies kann die Verwendung des "Gebietsschemas des Benutzers" beinhalten, ein obskures Konzept. Der Validator verwendet dann Windows-1252, vielleicht weil das der Standard für Englisch ist und der Validator "Englisch spricht", oder vielleicht nur, weil es wahrscheinlich ist, dass die Schätzung häufiger korrekt ist als jede andere einzelne Alternative.

Verwandte Themen