<meta charset = "utf-8"> против <meta http-эквивалента = "Content-Type">

Какие обозначения мне следует использовать для определения кодировки для HTML5 Doctype?

  1. Короткий:

    <meta charset="utf-8" /> 
    
  2. Долго:

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

7 ответов

Решение

В HTML5 они эквивалентны. Используйте более короткий, его легче запомнить и напечатать. Поддержка браузера хороша, так как она была разработана для обратной совместимости.

Обе формы объявления мета-кодировки эквивалентны и должны работать одинаково во всех браузерах. Но есть несколько вещей, которые вы должны помнить при объявлении набора символов веб-файлов как UTF-8:

  1. Сохраните ваши файлы в кодировке UTF-8 без метки порядка байтов (BOM).
  2. Объявите кодировку в ваших HTML-файлах, используя meta charset (как выше).
  3. Ваш веб-сервер должен обслуживать ваши файлы, объявив кодировку UTF-8 в заголовке HTTP Content-Type.

Серверы Apache по умолчанию настроены на обслуживание файлов в ISO-8859-1, поэтому вам необходимо добавить следующую строку в .htaccess файл:

AddDefaultCharset UTF-8

Это настроит Apache для обслуживания ваших файлов, объявляющих кодировку UTF-8 в заголовке ответа Content-Type, но ваши файлы должны быть сохранены в UTF-8 (без BOM) для начала.

Блокнот не может сохранить ваши файлы в UTF-8 без спецификации. Бесплатный редактор, который может это Notepad ++. В строке меню программы выберите "Кодирование> Кодировать в UTF-8 без спецификации". Вы также можете открывать файлы и повторно сохранять их в UTF-8, используя "Кодировка> Преобразовать в UTF-8 без спецификации".

Подробнее о метке порядка байтов (BOM) в Википедии.

Еще одна причина, по которой стоит использовать короткую, заключается в том, что она соответствует другим случаям, когда вы можете указать набор символов в разметке. Например:

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

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

Согласованность помогает уменьшить количество ошибок и сделать код более читабельным.

Обратите внимание, что атрибут charset нечувствителен к регистру. Вы можете использовать UTF-8 или UTF-8, однако UTF-8 более четкий, более читаемый, более точный.

Кроме того, нет абсолютно никакой причины использовать какое-либо значение, кроме UTF-8, в атрибуте meta charset или заголовке страницы. UTF-8 является кодировкой по умолчанию для веб-документов начиная с HTML4 в 1999 году и единственным практическим способом создания современных веб-страниц.

Также вы не должны использовать HTML-объекты в UTF-8. Символы, такие как символ авторского права, должны быть напечатаны напрямую. Единственные объекты, которые вы должны использовать, - это 5 зарезервированных символов разметки: меньше, больше, амперсанд, простое число, двойное простое число. Для сущностей необходим анализатор HTML, который вы не всегда хотите использовать в будущем, они вносят ошибки, делают ваш код менее читаемым, увеличивают размеры файлов и иногда неправильно декодируют в различных браузерах, в зависимости от того, какие сущности вы использовали. Узнайте, как вводить / вставлять авторское право, торговую марку, открытую цитату, закрытую цитату, апостроф, тире, тире, маркер, евро и любые другие символы, которые встречаются в вашем контенте, и использовать эти фактические символы в коде. В Mac есть средство просмотра символов, которое вы можете включить в Системных настройках клавиатуры, и вы можете найти и затем перетащить нужные символы или использовать соответствующее средство просмотра клавиатуры, чтобы увидеть, какие клавиши вводить. Например, товарным знаком является вариант + 2. UTF-8 содержит все символы и символы каждого письменного человеческого языка. Таким образом, нет оправдания для использования - вместо тире. Неплохая идея также изучить правила пунктуации и типографики... например, зная, что точка идет внутри закрытой цитаты, а не снаружи.

Использование тега для чего-то вроде типа контента и кодирования весьма иронично, поскольку, не зная этих вещей, вы не сможете проанализировать файл, чтобы получить значение метатега.

Нет, это не правда. Браузер начинает анализировать файл как кодировку браузера по умолчанию, либо UTF-8, либо ISO-8859-1. Поскольку US-ASCII является подмножеством как ISO-8859-1, так и UTF-8, браузер может читать просто так или иначе... это то же самое. Когда браузер обнаруживает метатегарсетный тег, если кодировка отличается от той, которую браузер уже использует, браузер перезагружает страницу в указанной кодировке. Вот почему мы помещаем мета-тег charset сверху, сразу после тега head, перед чем-либо еще, даже заголовком. Таким образом, вы можете использовать символы UTF-8 в заголовке.

Вы должны сохранить свои файлы в кодировке UTF-8 без спецификации

Это не совсем верно. Если в вашем документе только символы US-ASCII, вы можете сохранить его как US-ASCII и использовать его как UTF-8, потому что это подмножество. Но если есть символы Юникода, вы правы, вы должны сохранить как UTF-8 без спецификации.

Если вам нужен хороший текстовый редактор, который будет сохранять ваши файлы в UTF-8, я рекомендую Notepad++.

На Mac используйте Bare Bones TextWrangler (бесплатно) из Mac App Store или Bare Bones BBEdit, который находится в Mac App Store за 39,99 $... очень дешево для такого замечательного инструмента. В любом приложении в нижней части окна документа есть меню, в котором вы указываете кодировку документа, и вы можете легко выбрать "UTF-8 без спецификации". И, конечно, вы можете установить это в качестве настроек по умолчанию для новых документов в настройках.

Но если ваш веб-сервер обслуживает кодировку в заголовке HTTP, что рекомендуется, оба [мета-тега] не нужны.

Это неверно. Конечно, вы должны установить кодировку в заголовке HTTP, но вы также должны установить ее в атрибуте meta charset, чтобы страница могла быть сохранена пользователем из браузера в локальное хранилище, а затем открыта снова позже, в этом случае единственным указанием на кодировку, которая будет присутствовать, является атрибут meta charset. Вы также должны установить базовый тег по той же причине... на сервере базовый тег не нужен, но при открытии из локального хранилища базовый тег позволяет странице работать так, как если бы она находилась на сервере, со всеми активы на месте и тд, нет битых ссылок.

AddDefaultCharset 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, которые не помогают и могут причинить вред, особенно в дальнейшем, когда мы все дальше и дальше удаляемся от этих устаревших систем. Документ HTML с правильной HTML5, кодировкой UTF-8 и окончаниями строк Unix - это хорошо выполненная работа. Вы можете делиться, редактировать, хранить, читать, восстанавливать и полагаться на этот документ во многих контекстах. Это лингва франка. Это цифровая бумага.

<meta charset="utf-8"> был введен с / для HTML5.

Как указано в документации, оба действительны. Тем не мение, <meta charset="utf-8"> только для HTML5 (и легче набирать / запоминать).

В свое время старый стиль должен стать устаревшим в ближайшем будущем. Я бы придерживался нового <meta charset="utf-8">,

Там только один путь, но вверх. В случае с технологией, это сворачивает старое (действительно, ДЕЙСТВИТЕЛЬНО быстро)

Документация: Атрибут HTML meta charset - W3Schools

Не оспаривая другие ответы, я думаю, что стоит упомянуть следующее.

  1. Долго" (http-equiv) нотация и "короткая" равны, в зависимости от того, что произойдет первым;
  2. Заголовки веб-сервера будут переопределять все <meta> теги;
  3. BOM (метка порядка байтов) переопределит все, и во многих случаях это повлияет на html 4 (и, возможно, на другие вещи);
  4. Если вы не объявляете какую-либо кодировку, вы, вероятно, получите текст в "резервной кодировке текста", которая определяется вашим браузером. Ни в Firefox, ни в Chrome это utf-8;
  5. При отсутствии других подсказок браузер будет пытаться прочитать ваш документ, как если бы он был в ASCII, чтобы получить кодировку, поэтому вы не можете использовать какие-либо странные кодировки (однако, это должно делать utf-16 с BOM);
  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 и указывая ваш браузер на localhost:4500, (Конечно, вы захотите изменить или удалить детали. Часть спецификации \xef\xbb\xbf, Будьте осторожны с кодировкой вашей оболочки.)

Обратите внимание, что очень важно, чтобы вы явно объявили кодировку. Разрешение браузерам угадывать может привести к проблемам с безопасностью.

Использование <meta charset="utf-8" /> для веб-браузеров при использовании HTML5.

использование <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> при использовании HTML4 или XHTML, или для устаревших парсеров dom, таких как DOMDocument в php

Чтобы встроить подпись в электронное письмо, я бы использовал длинную версию:

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

Причина в том, что не многие читатели электронной почты используют html5, поэтому всегда лучше использовать старые стили html. На самом деле, лучше использовать таблицы, чем divs + css.

Есть некоторые новости, основанные на Mozilla Foundation, и sitepoint

Не используйте это значение (http-equiv=content-typeкак бы устарела. Предпочитаю charset атрибут на < meta> элемент.

Я бы порекомендовал сделать это таким образом, чтобы все соответствовало HTML5.

<meta charset="UTF-8">

НАПРИМЕР:

<!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>
Другие вопросы по тегам