html set encoding utf 8

I spent the last few hours getting my website to validate HTML 4.01 Strict and I actually have succeeded in that but there is still one warning which I can’t get rid of. The warning is:

The character encoding specified in the HTTP header (iso-8859-1) is different from the value in the element (utf-8). I will use the value from the HTTP header (iso-8859-1) for this validation.

На сколько бы это глупо не казалось, но для удачного выставления кодировки необходимо выполнить целых 11(!) правил.
Хочу зарание предупредить, если какая-то из настроек в .htaccess повлечет за собой ошибку 500, это значит, что хостинг запретил менять этот параметр на сервере. В таком случае проверьте тот факт, что у Вас UTF-8 и в случае чего обратитесь к админам хостинга.
И для тех, кто попал на эту страницу с вопросами об Ajax: Ajax работает в кодировке UTF-8.

Правило №1: Указываем в HTML верстке в теге первой строчкой, кроме случаев, где мы будем использовать тег , так как он так же как и кодировка имеет приоритет над расположением, следующий код:

Правило №2: Указываем кодировку для PHP и самого файла, для этого нам необходимо выставить заголовок функцией header(). Выставляем его в самом начале нашего файла (абсолютно в самом начале), сразу после указания уровня вывода ошибок:

Правило №3: Кодировка для подключения к к БД MySQL. Устанавливается после подключения к БД и выбора бд (mysql_connect, mysql_select_db). Если у нас модуль mysql:

или улучшенный модуль mysqli:

Правило №4: Кодировка в .htaccess:

Правило №5: Кодировка для библиотеки mb, начиная с версии php 5.4 можно не указывать, так как по умолчанию будет использоваться именно UTF-8. Ну а пока прописываем её в файле .htaccess:

Либо в самом PHP, что в итоге выполнит одни и те же действия:

Правило №6: При сохранении файлов (обязательно ВСЕХ!) выбрать кодировку UTF-8 without BOM, повторюсь, without BOM — это необходимая настройка, в противном случае Ваш сайт не будет работать как надо. Для тех, кто пользуется удобной программой DreamWeaver:
Modify => Page Properties => Title/Encoding и выставляем «Encoding: UTF-8», после чего нажимаем ReLoad, убираем галочку с BOM «Include Unicode Signature (BOM)». Apply + OK.
Модификации => Свойства страницы => Заголовок/Кодировка и выставляем кодировку UTF-8. Нажимаем «перезагрузить», убрали галочку с Подключить Юникод Сигнатуры (BOM). Применить и OK.

Правило №7: если на данный момент какой-то из текстов был введён на странице или в БД — его необходимо перенабрать. Дело в том, что символ в одной кодировке представляет один набор бит для русских символов, а в другой — другой. Именно поэтому необходимо его либо перенабрать, либо перекодировать. Современные программы имеют возможность перевести текст из одной кодировки в другую. Об этой возможности интересуйтесь в мануалах Ваших программ.

Правило №8: Есть исключение, когда текст приходит к Вам на страницу с другого сайта в другой кодировке. Тогда на PHP есть удобная функция для перевода из одной кодировки в другую:

Правило №9: Для строковых функций strlen, substr, необходимо использовать их аналоги на библиотеке mb_, а именно: mb_strlen, mb_substr, то есть к функции дописываем mb_ .

Правило №10: Для работы с регулярными выражениями необходимо указывать модификатор u . Это обязательный параметр!

Правило №11: Для CSS файлов указывается кодировка так:

В заключение скажу, что символы в кодировке WIN-1251 состоят из 1 байта, то есть 8 бит, а в свою очередь в кодировке UTF-8 символы могут состоять от 1 до 4 байт, всё дело в том, что кодировка UTF-8 позволяет создавать мультиязычные сайты, так как все существующие в мире символы в ней присутствуют.
Ради любопытства русская буква в кодировке UTF-8 занимает 2 байта, именно поэтому за 1 символ функция strlen возвращает длину 2, то есть 2 байта, а mb_strlen возвращает уже правильную длину в 1 символ.

Я видел эту инструкцию как самую первую строку многочисленных файлов CSS, которые были переданы мне:

что он делает, и это правило нужно?

кроме того, если я включу этот мета-тег в свой элемент «head», это устранит необходимость его присутствия в моих CSS-файлах?

4 ответов

Он сообщает браузеру прочитать файл css как UTF-8. Это удобно, если CSS содержит символы юникода, а не только ASCII.

использование его в метатеге нормально, но только для страниц, которые включают этот мета-тег.

прочитайте о правилах разрешения набора символов CSS-файлов в спецификация W3C для CSS 2.

это полезно в контекстах, где кодировка не указана в заголовке HTTP или других метаданных, например в локальной файловой системе.

представьте себе следующую таблицу:

если читатель сохраняет файл на жесткий диск и опустить @charset правило, большинство браузеров будут читать его в кодировке языкового стандарта ОС, например Windows-1252, и вставлять â†- вместо стрелки.

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

правильный правила для определения набора символов таблицы стилей в порядке приоритета:

  1. заголовок кодировки HTTP.
  2. Метку Порядка Следования Байтов.
  3. первый @charset правило.
  4. UTF-8.

последнее правило самое слабое, оно будет не работает в некоторых браузерах.
The в
устарел в HTML 5.
Следите за конфликтом между различными декларациями. Их нелегко отлаживать.

рекомендуемая литература

  • Русс Рольфе: объявление кодировок символов в CSS
  • в IANA: официальные имена для наборов символов — другие имена не допускаются; используйте имя на @charset если для одного и того же имени зарегистрировано более одного кодирование.
  • MDN: @charset . Существует таблица поддержки. Я не доверяю этому. 🙂
  • тест из РГ CSS.

одна из причин всегда включать спецификацию набора символов на каждой странице, содержащей текст, — избегать уязвимостей межсайтовых сценариев. В большинстве случаев набор символов UTF-8 является лучшим выбором для текста, включая HTML-страницы.

Если вы помещаете тег в свои css-файлы, вы делаете что-то неправильно. Тег принадлежит вашему HTML-код файлы и сообщает браузеру, как кодируется html, он ничего не говорит о css, который является отдельным файлом. Вы могли бы иметь совершенно разные кодировки для вашего html и css, хотя я не могу себе представить, что это была бы хорошая идея.

Оцените статью