<meta charset = «utf-8»> против <meta http-эквивалента = «Тип контента»>

1387

Чтобы определить кодировку для HTML5 Doctype, какую нотацию использовать?

  • Short:

    <meta charset="utf-8" /> 
    
  • Long

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
  • 90
    Использование тега <meta> для чего-то вроде типа контента и кодирования крайне иронично, поскольку, не зная этих вещей, вы не сможете проанализировать файл, чтобы получить значение метатега.
  • 312
    Вы можете анализировать его как ASCII, пока не дойдете до него. Алгоритм разбора HTML5 учитывает это.
Показать ещё 18 комментариев
Теги:
meta-tags
doctype

7 ответов

931
Лучший ответ

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

  • 23
    Как насчет поддержки браузера? Работает ли <meta charset='utf-8'> в IE6?
  • 9
    Насколько я знаю, да.
Показать ещё 14 комментариев
236

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

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

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

AddDefaultCharset UTF-8

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

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

Подробнее о Знак байтового заказа (BOM) в Википедии.

  • 19
    @CodeBoy Я бы изменил ваш ответ, сказав: «Вы должны сохранить ... без спецификации». На следующей странице написано «... для обеспечения совместимости обычно лучше не указывать спецификацию ...», что указывает на лучшую практику, но не обязательное требование: w3.org/International/questions/qa-byte-order-mark
  • 3
    В IIS вы можете установить кодировку в заголовках HTTP с помощью <globalization fileEncoding = "utf-8" responseEncoding = "utf-8" /> в Web.Config - добавьте его в <system.web>
Показать ещё 11 комментариев
82

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

<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, в атрибуте мета-charset или заголовке страницы. UTF-8 является кодировкой по умолчанию для веб-документов с HTML4 в 1999 году и единственным практическим способом создания современных веб-страниц.

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

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

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

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

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

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

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

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

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

AddDefaultCharset UTF-8

Или вы можете просто изменить кодировку определенных типов файлов следующим образом:

AddType text/html;charset=utf-8 html

Совет для обслуживания файлов UTF-8 и Latin-1 (ISO-8859-1) должен предоставить UTF-8 файлам текстовое расширение и латинские файлы "txt."

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

Наконец, рассмотрите вопрос о сохранении ваших документов с окончанием строки Unix, а не в устаревших версиях DOS или (классической) линии Mac, которые не помогают и могут повредить, особенно по линии, поскольку мы все больше и больше получаем от этих устаревших систем. HTML-документ с допустимой кодировкой HTML5, UTF-8 и окончанием строки Unix - это хорошо выполненная работа. Вы можете делиться и редактировать, хранить, читать и восстанавливать и полагаться на этот документ во многих контекстах. Это lingua franca. Это цифровая бумага.

  • 19
    «Если в вашем документе только символы ISO-8859-1, вы можете сохранить его как ISO-8859-1 и использовать его как UTF-8, потому что это подмножество» - неверно. Было бы правильно, если вы измените «ISO-8859-1» на «US-ASCII». US-ASCII совместим с UTF-8, поскольку является подмножеством, а ISO-8859-1 - нет. Чтобы преобразовать ISO-8859-1 (содержащий не-ASCII-символы) в UTF-8, вам необходимо кодировать не-ASCII-символы. Кодовые точки для ISO-8859-1 существуют в Unicode, но UTF-8 кодирует те, которые находятся вне US-ASCII, в отличие от ISO-8859-1.
  • 2
    Ваша точка зрения о сущностях HTML хорошая. В прошлом я использовал сущности только для того, чтобы обнаружить, что они были преобразованы в символы UTF-8 после сохранения в разных системах и / или открытия в разных редакторах. Тем не менее, стоит отметить, что неразрывные пробелы (& nbsp;) могут привести к сбивающим с толку результатам, поскольку вы, как правило, не будете видеть их в своем редакторе, поэтому для ясности обычно лучше сохранять их как сущности (по моему опыту).
Показать ещё 3 комментария
29

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

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

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

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

Документация: HTML-мета-кодировка Attribute-W3Schools

18

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

  • "длинная" (http-equiv) нотация и "короткая" равны, в зависимости от того, что наступит первым:
  • Заголовки веб-серверов будут перекрывать все теги <meta>;
  • BOM (отметка байтового байта) переопределит все, и во многих случаях это повлияет на html 4 (и, возможно, на другие вещи тоже);
  • Если вы не объявляете какую-либо кодировку, вы, вероятно, получите текст в "резервной текстовой кодировке", которая определяется вашим браузером. Ни в Firefox, ни в Chrome это utf-8;
  • В отсутствие других подсказок браузер попытается прочитать ваш документ, как если бы он был в ASCII, чтобы получить кодировку, поэтому вы не можете использовать какие-либо странные кодировки (хотя utf-16 с BOM должен делать);
  • В то время как в спецификациях утверждается, что объявление кодирования должно быть в пределах первых 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. Будьте осторожны с кодировкой вашей оболочки.)

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

  • 1
    Хорошие моменты, но не могли бы вы рассказать, какие проблемы безопасности вы имеете в виду?
  • 1
    Длинная нотация не должна переопределять короткую - просто первая в документе должна победить.
Показать ещё 4 комментария
9

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню