2011-10-14 34 views
2

爲什麼不驗證這個網頁?XHTML驗證:在序言中不允許使用字符「」。爲什麼?

http://www.jethroweb.nl/test/test.php

我覺得XHTML代碼是好的,但W3C Markup Validation ServiceWDG HTML Validator不同意。

UPDATE:是由PHP生成的XHTML代碼,這是第一行代碼:

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'; 
echo PHP_EOL; 
echo '  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 
echo PHP_EOL; 
echo '<html xmlns="http://www.w3.org/1999/xhtml">'; 
echo PHP_EOL; 
echo '<head>'; 
echo PHP_EOL; 

UPDATE2:也許這更是一個PHP的問題。當我生成的XHTML代碼粘貼到Notepad++我看到一個問號第一行:

enter image description here

+0

@DarkDust:你剛纔編輯的問題,以便它不再包含回答它所需的信息。您粘貼的代碼不包含實際問題的字節順序標記,因此它可以很好地驗證。 – Guffa

+0

@Guffa:我恢復了鏈接 – waanders

回答

2

由於每W3C validator

Byte-Order Mark found in UTF-8 File.

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.

這對你錯誤的原因:字節順序標記是一個零寬度的空間,它告訴你在prolog(doctype之前)中不允許使用字符。

使用文本編輯器重新保存文件,該文本編輯器允許在沒有BOM的情況下進行保存(幾乎除記事本之外的所有內容)。

+0

我用'編碼>轉換爲UTF-8沒有BOM'選項保存我的PHP源文件在Notepad ++中,現在XHTML代碼驗證正常! – waanders

+0

我想知道是否也可以使用PHP header()函數強制不使用BOM? – waanders

+0

@waanders:不。BOM是文件本身的一部分,PHP不知道它 - 如果存在BOM,PHP將簡單地認爲它是輸出的一部分。這也意味着'header'實際上*會打破* - 從PHP的角度來看,輸出已經開始,這意味着修改響應的HTTP標頭爲時已晚。 –

2

因爲文件是以字節順序標記發送的。

字節順序標記用於標識文本文件的編碼,但在通過Web發送文本時不應包含它們。

如果您的Web服務器在發送文件時無法刪除字節或標記,則必須保存沒有字節順序標記的文件。大多數編輯可以在另存爲對話框中選擇這樣做。

+0

但它不是靜態的XHMTL文件,它是由PHP生成的。我將在我的問題中添加PHP代碼 – waanders

+0

@waanders:然後BOM位於PHP標記文件中,並作爲靜態內容在輸出中傳遞。它只是被視爲PHP代碼標記之外的任何其他文本。 – Guffa

+0

感謝您的幫助,問題已解決,請參閱評論回答Michael Madsen – waanders

2

您的php源文件test.php包含字節順序標記。嘗試再次保存test.php而沒有字節順序標記。

相關問題