2013-07-29 27 views
10

Mi sto abbastanza confuso su un messaggio di errore sto ottenendo quando cerco di convalidare qualsiasi documento HTML semplice, senza una codifica meta come questo:Perché questo documento HTML5 non è valido?

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

Il validatore W3C http://validator.w3.org accetta a malincuore il documento come valido solo un paio avvertimenti quando viene incollato in forma ingresso diretto, ma quando il documento viene caricato o caricato da URI, la convalida non riesce con questo messaggio di errore

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

ci sono due cose che non capisco su questo errore :

  • Perché la codifica di caratteri mancanti viene considerata un errore, quando esistono regole di fallback?
  • Perché il validatore assume windows-1252 anziché UTF-8, come farebbe qualsiasi browser?

Qualcuno può spiegare questi due punti per favore? Sono abbastanza nuovo in questa roba, quindi per favore portami dietro.

+3

Cosa ti fa pensare che un browser supponga UTF-8 quando non viene specificata alcuna codifica? A quale "regole di riserva" ti riferisci? –

+0

La codifica Windows-1252 funziona? – pattyd

+0

Interessante ... il tuo esempio html mostrato si convalida come html5/utf8 quando lo incollo nella convalida tramite la finestra di input diretto – WebChemist

risposta

5

È la modalità "Ingresso diretto" del validatore che per impostazione predefinita è UTF-8. User-agent (browser) imposteranno automaticamente ad altre codifiche sulla base di una serie di cose:

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 validatore ha detto:

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.

in modo da prendere qualche risultato con un pizzico di sale .

Inoltre, non vi è alcun 'fallback' utile, il validatore deve solo selezionare qualcosa/qualsiasi cosa in modo che possa provare a convalidare per voi. W3C non è in grado di determinare/decidere quale codifica si desidera/deve utilizzare. Devi dichiararlo tu stesso in base a quali caratteri devi servire sulle tue pagine web, quindi chiedere a W3C di convalidare il tuo documento in base a ciò.

Quale editor/WYSIWYG stai utilizzando per creare pagine Web? Possiamo avere l'URL che stai cercando di convalidare?

+0

La modalità "Ingresso diretto" a cui fa riferimento l'OP "renderà automaticamente i dati UTF-8" e "ignora qualsiasi informazione sui set di caratteri". Vedi il mio commento a Campari. –

+0

Punto giusto. Anche se non "ignora strettamente alcuna informazione sul set di caratteri" in quanto modifica il meta set fornito se non è utf-8 (e inserisce il set di caratteri fornito dall'utente nel codice di commento HTML) – James

6

Bene, dipende da cosa si sta utilizzando.

  • se si utilizza l'opzione File Upload, esso dipende da quale la codifica del file HTML è stato salvato con.
  • se si utilizza l'opzione Direct Input, dipende dal navigatore .

Se non si desidera che il validatore di indovinare, e utilizzare UTF-8, è possibile aggiungere la seguente riga

<meta charset="UTF-8"> 

all'interno della head element.

+0

La modalità di input diretto non dipende dal navigatore.Dalla pagina di convalida: "Diversamente dalle modalità" URI "e" Caricamento file ", la modalità" Inserimento diretto "del validatore fornisce contenuti convalidati sotto forma di caratteri incollati o digitati nel campo modulo del validatore. i dati UTF-8, e quindi il validatore non ha bisogno di determinare la codifica dei caratteri del tuo documento, e ignorerà qualsiasi informazione sui charset specificata. " –

1

Quando si utilizza Convalida tramite URI, il server deve annunciare la codifica dei caratteri nelle intestazioni HTTP, più precisamente nel parametro charset del valore di intestazione Content-Type.In questo caso, questo a quanto pare non accade. Puoi controllare la situazione, ad es. utilizzando Rex Swain's HTTP Viewer.

Secondo clausola 4.2.5.5 Specifying the document's character encoding in HTML5 CR, “Se un documento HTML non inizia con una distinta base, e la sua codifica non è esplicitamente dato da Content-Type metadati, e il documento non è un documento iframe srcdoc, poi il carattere la codifica utilizzata deve essere una codifica di caratteri compatibile ASCII e la codifica deve essere specificata utilizzando un meta elemento con un attributo charset o un meta elemento con un attributo http-equiv nello stato di dichiarazione di codifica. "Questo è un po 'complicato, ma il la linea di fondo è: ci sono diversi modi per dichiarare la codifica, ma se nessuno di essi viene usato, il documento non è conforme.

Perché specifica che è un po 'speculativo, ma l'idea generale è che tali regole promuovono affidabilità e robustezza. Quando la regola non è rispettata, i diversi browser possono utilizzare valori predefiniti o tentativi di congettura diversi.

Il validatore assume windows-1252, perché questo è quello che portano le regole HTML5. Le regole di elaborazione sono in 8.2.2.1 Determining the character encoding. Sono abbastanza complicati, ma riflettono in larga misura il modo in cui i browser moderni fanno (e mira a renderlo uno standard). Le regole ci sono anche per trattare documenti non conformi, ma questo non rende questi documenti conformi; le regole di elaborazione degli errori non sono realmente "fallback" e non dovrebbero essere invocate, specialmente dal momento che i vecchi browser non sempre giocano secondo le regole.

Le regole di errore diventano un po 'allentate quando si tratta di una situazione in cui tutto il resto fallisce e deve essere utilizzata una "codifica dei caratteri di default definita dall'implementazione o specificata dall'utente". Ci sono solo "suggerimenti" su cosa potrebbero fare i browser (di nuovo, rispecchiando ciò che generalmente fanno i browser moderni), e questo può comportare l'uso del "locale dell'utente", un concetto oscuro. Il validatore usa windows-1252 quindi, forse perché è l'impostazione predefinita per l'inglese e il validatore "parla" l'inglese, o forse solo perché è l'ipotesi che dovrebbe essere corretta più spesso di qualsiasi altra alternativa singola.

Problemi correlati