против - PullRequest
       74

против

1471 голосов
/ 15 января 2011

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

  1. Short:

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

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

Ответы [ 7 ]

1043 голосов
/ 15 января 2011

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

245 голосов
/ 21 мая 2011

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

  1. Сохраните ваши файлы в кодировке UTF-8 без метка порядка байтов (BOM).
  2. Объявите кодировку в ваших HTML-файлах, используя meta charset (как выше).
  3. Yourвеб-сервер должен обслуживать ваши файлы, объявляя кодировку 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) в Википедии .

81 голосов
/ 21 августа 2011

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

<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 есть средство просмотра символов, которое вы можете включить в Системных настройках клавиатуры, и вы можете найти и затем перетащить нужные символы или использовать соответствующее средство просмотра клавиатуры, чтобы увидеть, какие клавиши вводить.Например, товарным знаком является Option + 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 - это хорошо выполненная работа. Вы можете обмениваться, редактировать, хранить, читать, восстанавливать и полагаться на этот документ во многих контекстах. Это лингва франка. Это цифровая бумага.

30 голосов
/ 26 июня 2014

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

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

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

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

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

17 голосов
/ 15 января 2016

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

  1. «Длинное» (http-equiv) обозначение и «короткое» равны, в зависимости от того, что произойдет раньшеwins;
  2. Заголовки веб-сервера переопределяют все теги <meta>;
  3. BOM (метка порядка байтов) переопределяет все , и во многих случаях это влияет на HTML4 (и, возможно, другие вещи);
  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. Будьте осторожны с кодировкой вашей оболочки.)

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

11 голосов
/ 26 ноября 2015

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

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

2 голосов
/ 16 августа 2017

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

Не используйте это значение (http-equiv=content-type), поскольку оно устарело.Предпочитайте атрибут charset для элемента <<code>meta>.enter image description here

...