2010-07-02 84 views
1

我不是在谈论内容中的空白,而是代码本身。HTML如何处理标记中的空白区域?

我有一堆验证错误在我的HTML,发现那是因为我在我的标记缺少空间 -

<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… 

我以为这不会有问题,但在其他W3C验证的状态。增加它们之间的空间修复错误 -

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

这意味着你必须编写HTML的时候,像这样的错误是找到一个真正的痛苦要格外小心。我正在寻找表中缺少封闭标签。

HTML处理每个标记的空格是否与此相同?

+2

您需要一个空间来分隔属性,是的。这是它真正意义上唯一的方法 - 否则,你会如何区分一个真正长的三个属性的连接? – Unicron 2010-07-02 10:02:43

+0

因此,HTML会将空白视为PHP处理分号的对象? 我不明白HTML是如何知道何时声明单独的属性,虽然我猜想它可以通过fu =“bar”或fu ='bar'来判断,而不是通过空格来判断。 – theorise 2010-07-02 10:08:53

+0

不,它是根据规范强制使用的空白空间。但我同意你的看法,这个消息不是很有用。你是否已经用另一个验证器进行了测试,如[Total Validator](http://www.totalvalidator.com)? – 2010-07-02 17:55:30

回答

2

由于引号在HTML中是可选的,空间不能。该浏览器将无法告诉在那里结束了值和下一个属性开始:

<td class=col_titlecolspan=2> 

一些浏览器都比较挑剔,这些东西比其他,它的HTML和XHTML之间的区别。验证器是一个很好的工具,因为它比任何浏览器都更严格。如果它在那里工作,没有浏览器会有理解语法的问题。

+0

我不知道引号是可选的。现在更有意义了。 – theorise 2010-07-02 10:25:14

+3

对于简单的字母数字和下划线属性值,它们在HTML中是可选的;一旦你开始将标点符号放在那里,它就不再有效,浏览器的行为可能会有所不同。无论如何,如果您使用的是XHTML(您似乎是从部分引用的DOCTYPE中获得的),那么您将受到更严格的规则(但更简单的规则),并且必须同时包含引号和空格。 – bobince 2010-07-02 10:32:28

2

W3C推荐需要空间:

元素可以具有相关联的属性 ,称为属性,其 可以具有的值(默认情况下,或通过 作者或脚本中设置)。属性/值 对出现在元素的开始标记的最后一个“>” 之前。任何数量的 (合法)属性值对, 以空格分隔,都可能出现在 元素的开始标记中。他们可能以任何顺序出现 。

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

当然,浏览器都应该解决他们发现的错误,这就是为什么你的HTML工作正常。但是,您应该尝试生成有效的HTML:有效HTML的呈现已定义且(或多或少)可预测,但呈现无效HTML基本上是随机的;-)