有效的 HTML 文件的結構
<!DOCTYPE html>
<html>
<head>
<title>文件標題</title>
</head>
<body>
<!-- 將你的網頁內容寫在這裡 -->
</body>
</html>
<!DOCTYPE>
:告知瀏覽器這份文件是使用哪個 HTML 版本所撰寫。https://developer.mozilla.org/zh+TW/docs/Glossary/Doctype<html>
:HTML 文件的主要(root)元素,每個 HTML 文件都必須有此元素,其他元素則必須被包含在這個元素之下。每個 HTML 文件只能有一個<html>
元素。https://developer.mozilla.org/zh+CN/docs/Web/HTML/Element/html<head>
:定義 HTML 文件後設資料(meta data)的元素,包括文件的標題、CSS 樣式表及 JavaScript 腳本程式,以及提供給搜尋引擎或社交媒體網站辨識的描述資訊。每個 HTML 文件只能有一個<head>
元素。https://developer.mozilla.org/zh+CN/docs/Web/HTML/Element/head<title>
:定義 HTML 文件標題的元素,這裡的標題會出現在瀏覽器的頁籤上;請注意,這裡的標題不會出現在瀏覽器的內容區。https://developer.mozilla.org/zh+CN/docs/Web/HTML/Element/title<body>
:用來包含 HTML 文件的主要內容,也是呈現在瀏覽器內容區的主要資訊來源。每個 HTML 文件只能有一個<body>
元素。https://developer.mozilla.org/zh+CN/docs/Web/HTML/Element/body<!-- -->
:用來定義 HTML 文件中的註解內容,瀏覽器會忽略註解內容,只有在「檢視原始碼」的狀態下才會看到,主要是提供給網頁開發人員維護用的資訊。https://developer.mozilla.org/en+US/docs/Web/Guide/HTML/The_Importance_of_Correct_HTML_Commenting
一份格式正確的 HTML 文件,大體上都會包含以上說明的 HTML 元素(網頁註解則視需求而定),也就算得上是「有效的 HTML 文件」(valid HTML document);如果你想要進一步瞭解何謂有效的 HTML 文件,或是想檢驗你所撰寫的 HTML 文件是否符合有效文件,你可以利用 W3C 標記檢驗服務進行檢驗,以瞭解怎麼改善你的 HTML 文件使其符合有效文件。
HTML 文件的語系標記法
我們可以在 <html>
元素加上 lang
的屬性,並標記該份 HTML 文件採用的語言為何。
<html lang="zh-Hant">
<!--
zh-Hans 簡體中文
zh-Hans-CN 大陸地區使用的簡體中文
zh-Hans-HK 香港地區使用的簡體中文
zh-Hans-MO 澳門使用的簡體中文
zh-Hans-SG 新加坡使用的簡體中文
zh-Hans-TW 臺灣使用的簡體中文
zh-Hant 繁體中文
zh-Hant-CN 大陸地區使用的繁體中文
zh-Hant-HK 香港地區使用的繁體中文
zh-Hant-MO 澳門使用的繁體中文
zh-Hant-SG 新加坡使用的繁體中文
zh-Hant-TW 臺灣使用的繁體中文
-->
HTML 文件的後設資料標記法
在上面的段落中有提到 <head>
元素會用來標記 HTML 文件的標題及後設資料,除此之外,通常也會標示該份文件的編碼方式。這些後設資料都是使用 <meta>
元素來定義的。
<head>
<!-- 定義字元編碼方式(僅適用 HTML5) -->
<meta charset="utf-8">
<!-- 定義字元編碼方式(僅適用 HTML4) -->
<!-- 注意:下面這行在 HTML5 是不合法的用法 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- 三秒後重導向到別的頁面 -->
<meta http-equiv="refresh" content="3;url=http://www.mozilla.org/">
<!-- Google 搜尋引擎可以識別的中繼標記 -->
<!-- 詳細說明請看 https://support.google.com/webmasters/answer/79812?hl=zh-Hant -->
<meta name="description" content="我們可以在 HTML 的 Head 標記內寫入關於這個頁面的描述資訊">
<meta name="google-site-verification" content="+nxGUDJ4QpAZ5l9Bsjdi102tLVC21AIh5d1Nl23908vVuFHs34="/>
<meta name="robots" content="noindex,nofollow">
<meta name="googlebot" content="noidex,nofollow" />
<title>Meta 資訊的說明</title>
<!-- Facebook 可以識別的中繼標記 -->
<!-- 詳細說明請看 https://developers.facebook.com/docs/sharing/webmasters#markup -->
<meta property="og:title" content="文章標題"/>
<meta property="og:image" content="https://davidwalsh.name/wp-content/themes/klass/img/facebooklogo.png"/>
<meta property="og:site_name" content="網站名稱"/>
<meta property="og:description" content="我們可以在 HTML 的 Head 標記內寫入關於這個頁面的描述資訊">
<!-- Twitter 可以識別的中繼標記 -->
<!-- 詳細說明請看 https://dev.twitter.com/cards/markup -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:description" content="The table in this section explains Twitter Card elements and any Open Graph protocol markup fallbacks." />
<meta name="twitter:title" content="Cards Markup Tag Reference" />
<meta name="twitter:image" content="https://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3.png" />
</head>
除了 <meta>
元素定義後設資料外,我們也會使用 <link>
元素來引用外部 CSS 樣式表,以及使用 <script>
元素來引用外部的 JavaScript 腳本程式。
<head>
<link rel="stylesheet" type="text/css" href="styles.css">
<script src="scripts.js"></script>
</head>
HTML 文件的編碼方式
有時候我們在瀏覽網頁時會看到「亂碼」,通常都是因為瀏覽器的字元編碼設定錯誤的問題。由於電腦只能儲存 0 與 1 兩種狀態,所以電腦之間的資料交換都必須先將資料轉換成 0/1 型式的內容,例如說我想要傳送「A
」給對方的電腦,但我怎麼知道要將 A
轉換成什麼數字呢?這個問題就要靠字元編碼來解決,字元編碼是電腦之間用來溝通的一套符號集,以剛剛的例子來說,我們必須先將 A
轉換成一個「數字」,然後傳送給對方的電腦,而對方的電腦取得這個「數字」時,也要能夠知道轉換回 A
。就像「摩斯電碼」一樣,使用摩斯電腦交換資訊的兩方,都要有一本轉譯本,才能將接受到的資訊轉譯回真實的資料內容。
如果我們只是要交換「英文」資料,那事情就簡單很多,因為電腦在很早期就已經發展出「ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼),就例如剛剛提到的 A
會先轉譯成 65
(也就是二進位的 01000001
),然後將這一串二進位資料型式的內容傳送給對方,對方電腦收到這串二進位資料型式的內容後,會去對照 ASCII 表,查到這串資料其實就是指 A
,因此要順利完成進行資料交換的話,首要條件是雙方都使用同一套編碼方式。
講到這裡,應該就會知道為什麼在瀏覽網頁時會看到「亂碼」了吧,其實亂碼的出現就是因為資料交換的兩方不是採用同一套編碼方式,以致於無法呈現正確的資料內容。那麼為什麼有時我們明明在網頁內容寫的是中文,也都正確的顯示,但透過瀏覽器顯示時又會造成亂碼呢?這是段很久遠的歷史故事了,總之大部分都可能是因為網頁儲存成 Big5 編碼方式,而瀏覽器是設定成 UTF-8 的編碼方式,以致於無法正確顯示中文。
所以,如果你也遇到「亂碼」,那你可以先確認一下網頁的編碼方式是 utf-8
還是 big5
。由於某些歷史緣故,建議直接採用 utf-8
編碼方式,不只可以正確中文,也可以正確顯示其他語言的文字。
<meta charset="utf-8">