2010-07-02 3 views
1

Je ne parle pas d'espace blanc dans le contenu, mais du code lui-même.Comment le langage HTML gère-t-il les espaces blancs dans le balisage?

J'ai eu un tas d'erreurs de validation dans mon HTML et découvert qu'il était parce que je manque un espace dans mon balisage -

<td class="col_title"colspan="2"> 

Line 1, Column 80: attributes construct error 
Line 1, Column 80: Couldn't find end of Start Tag td line 1 
Line 1, Column 80: Opening and ending tag mismatch: tr line 1 and td 
Line 1, Column 80: Opening and ending tag mismatch: tbody line 1 and tr 
Line 1, Column 80: Opening and ending tag mismatch: table line 1 and tbody 
Line 1, Column 80: Opening and ending tag mismatch: div line 1 and table 
Line 1, Column 80: Opening and ending tag mismatch: body line 1 and div 
Line 1, Column 80: Opening and ending tag mismatch: html line 1 and body 
Line 1, Column 80: Extra content at the end of the document 

All were highlighting the following line (I was validating local HTML if it makes any difference) 

…1.0 Transitional//EN" "http://www.w3.**o**rg/TR/xhtml1/DTD/xhtml1-transitional.dt… 

Je suppose ce ne serait pas question, mais stipule le contraire validateur du W3C. Ajout d'un espace entre eux a fixé les erreurs -

<td class="col_title" colspan="2"> 

Cela signifie que vous devez être très prudent lors de l'écriture HTML, et des erreurs comme celle-ci sont une vraie douleur à trouver. Je cherchais des étiquettes fermées manquantes dans la table.

Le code HTML traite-t-il les espaces blancs de la même façon pour chaque étiquette?

+2

Vous avez besoin d'un espace pour séparer les propriétés, oui. C'est la seule façon de le comprendre vraiment - sinon, comment distingueriez-vous une concaténation de trois propriétés d'une très longue? – Unicron

+0

Alors HTML traite les espaces comme PHP traiterait un point-virgule? Je ne comprends pas comment le HTML sait quand des propriétés séparées sont indiquées, bien que je suppose que cela pourrait se dire par le fu = "bar" ou fu = "bar" et non par l'espace blanc. – theorise

+0

Non, c'est l'espace blanc obligatoire par spécification. Mais je suis d'accord avec vous que ce message n'est pas très utile. L'avez-vous testé avec un autre validateur, comme [Total Validator] (http://www.totalvalidator.com)? –

Répondre

2

Comme les guillemets sont optionnels en HTML, le les espaces ne peuvent pas être. Le navigateur ne serait pas en mesure de dire où la valeur terminée et l'attribut suivant a commencé:

<td class=col_titlecolspan=2> 

Certains navigateurs sont plus pointilleux sur ces choses que les autres, et il diffère entre HTML et XHTML. Le validateur est un bon outil, car il est plus strict sur la syntaxe que n'importe quel navigateur. Si cela fonctionne, aucun navigateur n'aura de problème pour comprendre la syntaxe.

+0

Je n'avais aucune idée des guillemets étaient facultatifs. Fait beaucoup plus de sens maintenant. – theorise

+3

Ils sont facultatifs en HTML, pour les valeurs d'attributs alphanumériques et de soulignement simples; Une fois que vous commencez à y mettre de la ponctuation, elle n'est plus valide et les navigateurs peuvent se comporter différemment.Dans tous les cas, si vous utilisez XHTML - ce que vous semblez être, à partir du DOCTYPE partiellement cité - vous êtes soumis à des règles plus strictes (mais plus simples) et vous devez inclure à la fois les guillemets et l'espace. – bobince

2

La recommandation du W3C exige des espaces:

éléments peuvent avoir associés propriétés, appelées attributs, qui ont des valeurs peuvent (par défaut ou défini par auteurs ou scripts). Les paires attribut/valeur apparaissent avant le ">" final de l'étiquette de début d'un élément. Un nombre quelconque de paires de valeurs d'attribut (légales), séparées par des espaces, peuvent apparaître dans une balise de début de l'élément . Ils peuvent apparaître dans n'importe quel ordre.

http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.2

Bien sûr, les navigateurs sont censés corriger les erreurs qu'ils trouvent et c'est pourquoi votre code HTML fonctionne correctement. Cependant, vous devriez essayer de produire du HTML valide: le rendu de HTML valide est défini et (plus ou moins) prévisible mais le rendu de HTML invalide est fondamentalement aléatoire ;-)

Questions connexes