簡體   English   中英

<meta charset="utf-8">對比<meta http-equiv="Content-Type">

[英]<meta charset="utf-8"> vs <meta http-equiv="Content-Type">

為了為HTML5 Doctype定義字符集,我應該使用哪種表示法?

  1. 短的:

     <meta charset="utf-8" />
  2. 長:

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

在 HTML5 中,它們是等價的。 使用較短的一個,更容易記住和輸入。 瀏覽器支持很好,因為它是為向后兼容而設計的。

元字符集聲明的兩種形式是等效的,並且在瀏覽器中的工作方式應該相同。 但是,在將 Web 文件字符集聲明為 UTF-8 時,您需要記住以下幾點:

  1. 不帶字節順序標記(BOM) 的 UTF-8 編碼保存您的文件。
  2. 使用元字符集(如上)在 HTML 文件中聲明編碼。
  3. 您的 Web 服務器必須為您的文件提供服務,並在 Content-Type HTTP 標頭中聲明 UTF-8 編碼。

默認情況下,Apache 服務器配置為提供 ISO-8859-1 中的文件,因此您需要將以下行添加到您的.htaccess文件中:

AddDefaultCharset UTF-8

這將配置 Apache 為您的文件提供在 Content-Type 響應標頭中聲明 UTF-8 編碼的文件,但您的文件必須以 UTF-8(無 BOM)開始保存。

記事本無法在沒有 BOM 的情況下以 UTF-8 格式保存您的文件。 可以是Notepad++ 的免費編輯器。 在程序菜單欄上,選擇“編碼 > 以 UTF-8 編碼,無 BOM”。 您還可以使用“編碼 > 無 BOM 轉換為 UTF-8”打開文件並以 UTF-8 格式重新保存它們。

有關Wikipedia上的字節順序標記 (BOM) 的更多信息。

使用短的另一個原因是它與您可能在標記中指定字符集的其他實例相匹配。 例如:

<script type="javascript" charset="UTF-8" src="/script.js"></script>

<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>

一致性有助於減少錯誤並使代碼更具可讀性。

請注意,字符集屬性不區分大小寫。 您可以使用 UTF-8 或 utf-8,但 UTF-8 更清晰、更易讀、更准確。

此外,完全沒有理由在元字符集屬性或頁眉中使用 UTF-8 以外的任何值。 自 1999 年的 HTML4 以來,UTF-8 是 Web 文檔的默認編碼,也是制作現代 Web 頁面的唯一實用方法。

此外,您不應在 UTF-8 中使用 HTML 實體。 像版權符號這樣的字符應該直接輸入。 您應該使用的唯一實體是 5 個保留標記字符:小於、大於、與號、素數、雙素數。 實體需要一個 HTML 解析器,您可能並不總是希望在未來使用它,它們會引入錯誤,使您的代碼可讀性降低,增加文件大小,並且有時會在各種瀏覽器中錯誤地解碼,具體取決於您使用的實體。 了解如何鍵入/插入版權、商標、左引號、右引號、撇號、破折號、破折號、項目符號、歐元和您在內容中遇到的任何其他字符,並在您的代碼中使用這些實際字符。 Mac 有一個字符查看器,你可以在鍵盤系統偏好設置中打開它,你可以找到然后拖放你需要的字符,或者使用匹配的鍵盤查看器來查看要鍵入的鍵。 例如,商標是Option+2。 UTF-8 包含來自每種書面人類語言的所有字符和符號。 所以沒有理由使用 -- 而不是破折號。 學習標點符號和排版規則也不是一個壞主意……例如,知道句號在引號內,而不是在外引號內。

為內容類型和編碼之類的東西使用標簽是非常具有諷刺意味的,因為如果不知道這些東西,你就無法解析文件來獲取元標簽的值。

不,這不是真的。 瀏覽器開始將文件解析為瀏覽器的默認編碼,UTF-8 或 ISO-8859-1。 由於 US-ASCII 是 ISO-8859-1UTF-8 的子集,因此瀏覽器可以很好地讀取任何一種方式……它是相同的。 當瀏覽器遇到 meta charset 標簽時,如果編碼與瀏覽器已經使用的不同,瀏覽器會以指定的編碼重新加載頁面。 這就是為什么我們將元字符集標簽放在頂部,緊跟在 head 標簽之后,在其他任何東西之前,甚至是標題。 這樣您就可以在標題中使用 UTF-8 字符。

您必須以不帶 BOM 的 UTF-8 編碼保存您的文件

嚴格來說並非如此。 如果您的文檔中只有 US-ASCII 字符,則可以將其另存為 US-ASCII 並將其用作 UTF-8,因為它是一個子集。 但是如果有Unicode字符,你是對的,你必須另存為沒有BOM的UTF-8。

如果你想要一個好的文本編輯器來保存你的 UTF-8 文件,我推薦 Notepad++。

在 Mac 上,使用 Mac App Store 中的 Bare Bones TextWrangler(免費),或 Mac App Store 中的 Bare Bones BBEdit,售價 39.99 美元……對於這樣一款出色的工具來說非常便宜。 在任一應用程序中,文檔窗口底部都有一個菜單,您可以在其中指定文檔編碼,您可以輕松選擇“UTF-8 無 BOM”。 當然,您可以將其設置為首選項中新文檔的默認值。

但是,如果您的 Web 服務器提供 HTTP 標頭中的編碼(推薦),則兩個 [meta 標記] 都是不必要的。

那是不正確的。 您當然應該在 HTTP 標頭中設置編碼,但您也應該在元字符集屬性中設置它,以便用戶可以將頁面從瀏覽器保存到本地存儲,然后稍后再次打開,在這種情況下將出現的編碼的唯一指示是元字符集屬性。 出於同樣的原因,您還應該設置一個基本標簽......在服務器上,基本標簽是不必要的,但是當從本地存儲打開時,基本標簽使頁面能夠像在服務器上一樣工作,所有的資產到位等等,沒有斷開的鏈接。

添加默認字符集 UTF-8

或者您可以像這樣更改特定文件類型的編碼:

AddType text/html;charset=utf-8 html

同時提供 UTF-8 和 Latin-1 (ISO-8859-1) 文件的一個技巧是為 UTF-8 文件提供“文本”擴展名,為 Latin-1 文件提供“txt”擴展名。

AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text

最后,考慮使用 Unix 行結束符保存您的文檔,而不是傳統的 DOS 或(經典)Mac 行結束符,這無濟於事,可能會造成傷害,尤其是隨着我們越來越遠離那些遺留系統。 具有有效 HTML5、UTF-8 編碼和 Unix 行結尾的 HTML 文檔是一項出色的工作。 您可以在許多上下文中共享、編輯、存儲、閱讀和恢復並依賴該文檔。 這是通用語言。 是數碼紙。

<meta charset="utf-8">是針對 HTML5 引入的。

如文檔中所述,兩者都是有效的。 但是, <meta charset="utf-8">僅適用於 HTML5(並且更易於輸入/記憶)。

在適當的時候,舊樣式必然會在不久的將來被棄用 我會堅持使用新的<meta charset="utf-8">

只有一種方法,但是向上。 在技​​術的情況下,這是逐步淘汰舊的(真的,非常快)

文檔: HTML 元字符集屬性—W3Schools

雖然不反對其他答案,但我認為以下內容值得一提。

  1. “長”( http-equiv )表示法和“短”表示http-equiv等,先到者勝;
  2. Web 服務器標頭將覆蓋所有<meta>標簽;
  3. BOM(字節順序標記)將覆蓋所有內容,並且在許多情況下它會影響 html 4(可能還有其他內容);
  4. 如果您不聲明任何編碼,您可能會在瀏覽器定義的“回退文本編碼”中獲取文本。 在 Firefox 和 Chrome 中都不是 utf-8;
  5. 在沒有其他線索的情況下,瀏覽器將嘗試讀取您的文檔,就好像它是 ASCII 格式一樣以獲取編碼,因此您不能使用任何奇怪的編碼(但是,帶有 BOM 的 utf-16 應該可以);
  6. 雖然規范說編碼聲明必須在文檔的前 512 個字節內,但大多數瀏覽器會嘗試閱讀更多。

您可以通過運行echo 'HTTP/1.1 200 OK\\r\\nContent-type: text/html; charset=windows-1251\\r\\n\\r\\n\\xef\\xbb\\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500 echo 'HTTP/1.1 200 OK\\r\\nContent-type: text/html; charset=windows-1251\\r\\n\\r\\n\\xef\\xbb\\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500 echo 'HTTP/1.1 200 OK\\r\\nContent-type: text/html; charset=windows-1251\\r\\n\\r\\n\\xef\\xbb\\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500並將瀏覽器指向localhost:4500 (當然,您會想要更改或刪除部分。BOM 部分是\\xef\\xbb\\xbf 。請注意外殼的編碼。)

請注意,明確聲明編碼非常重要。 讓瀏覽器猜測可能會導致安全問題。

使用 HTML5 時,將<meta charset="utf-8" />用於 Web 瀏覽器。

使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />時使用 HTML4 或 XHTML,或者過時的 dom 解析器,如 php 5.3 中的DOMDocument

要在電子郵件中嵌入簽名,我將使用長版本:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

原因是沒有多少電子郵件閱讀器使用 html5,所以最好使用舊的 html 樣式。 實際上,使用表格也比使用 divs + css 更好。

有一些基於Mozilla Foundationsitepoint 的新聞

不要使用此值 ( http-equiv=content-type ),因為它已過時。 首選 < meta > 元素上的charset屬性。 在此處輸入圖片說明

我建議這樣做以使事情與 HTML5 保持一致。

<meta charset="UTF-8">

EG:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM