2010-07-02 45 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基本上是隨機的;-)