Атрибут charset
Указывает кодировку документа. Атрибут введен в HTML5 и предназначен для сокращения формы тега , которая задавала кодировку в предыдущих версиях HTML и XHTML.
Синтаксис
Значения
Название кодировки, например UTF-8.
Значение по умолчанию
HTML5 IE Cr Op Sa Fx
Тег META, атрибут charset Типовой документ.
Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.
Типы тегов
HTML5

Блочные элементы

Строчные элементы

Универсальные элементы

Нестандартные теги

Осуждаемые теги

Видео

Документ

Звук

Изображения

Объекты

Скрипты

Списки

Ссылки

Таблицы

Текст

Форматирование

Формы

Фреймы
16. Кодировка HTML страницы и атрибуты
Вы когда-нибудь видели на странице в интернете какие-то знаки вопроса, квадратики и прочее вместо текста? Думаю, что видели. Так вот, у этого сайта проблема с кодировкой, вполне возможно разработчик ее не указал. Кодировка, простыми словами, это таблица содержащая набор символов. Для того чтобы добавить кодировку сайта, нужен многофункциональный тег , о нем написан целый урок. Итак, чтобы браузер понял, какую кодировку вы используете, применяйте эту строку:
Что такое кодировка?
Кодировка, это набор символов, представленный в таблице. Таблица содержит сам символ и его код, например, двоичный (нули и единицы). Термин «набор символов» редко используется, чаще всего говорят «кодировка». На данный момент популярны две кодировки: ASCII и UTF-8. На нашем сайте используется кодировка UTF-8 .
Подробнее о кодировке?
Кодировка ASCII является американской и разрабатывалась для английского языка. Так как, к примеру, французский язык имеет надстрочные знаки, а русский алфавит не похож на английский, был разработан стандарт Unicode для расширения кодировки ASCII. Но и в Unicode, со временем, стало не хватать места для размещения новых символов. Поэтому на основе Unicode создали кодировку UTF-8, которая исправила эти недостатки. UTF-8 позволяет кодировать до 2 миллиардов символов, поэтому она доминирует в интернете.
В UTF-8 коды от 0 до 127 используются для представления символов ASCII. Если символ не входит в набор ASCII, то старший бит первого байта устанавливается в 1, что свидетельствует о дополнительном использовании байтов. То есть если в документе используются только символы из ASCII, то каждый символ в UTF-8 будет кодироваться восьмью битами.
Что такое атрибуты?
Настало время познакомиться с атрибутами в HTML. Вы их уже встречали, просто на них не акцентировалось внимание. Атрибуты – это дополнение к тегам, расширяющее их возможности. Они всегда указываются в открывающемся теге. Атрибут состоит из имени и значения, разделенного знаком равенства.
Имя атрибута необходимо писать в нижнем регистре. Хотя HTML5 и позволяет писать в любом регистре и не использовать кавычки, все же так не рекомендуется делать.
Кодировка UTF-8 в html странице
Есть index.html , который, при запуске локально (chrome, IE), отображается корректно. При загрузке на виртуальный сервер, и открытии через Chrome — абракадабра. Через IE — все ок (вероятно, IE подстраивается под необходимую кодировку, хотя в кодировке так же — UTF-8 ). В head есть строка:
Но wget возвращает: charset=CP1251 . Почему? Возможно, нужно поменять что-то на сервере? Сервер linux, uhttpd
Отслеживать
2,969 3 3 золотых знака 15 15 серебряных знаков 30 30 бронзовых знаков
задан 3 ноя 2015 в 11:13
Vyacheslav Groshenkov Vyacheslav Groshenkov
157 2 2 серебряных знака 10 10 бронзовых знаков
да, вероятно, надо заменить заголовок content-type на актуальный. посмотрите, что возвращает, например, этот сайт: $ wget -S —spider http://stackoverflow.com |& grep -i content-type
3 ноя 2015 в 11:19
Вернуло: Content-Type: text/html; charset=utf-8 Соответственно, у меня и стоит utf-8. Поэтому, никак не могу понять, в чем проблема. Попробовал поменять на: — не помогло. (в таком режиме корректно работают php страницы на сервере).
3 ноя 2015 в 11:23
Я сделал команду выше на свой сайт, вернуло: text/html; charset=CP1251 . Хотя в index.html стоит UTF-8. Видимо в этом и ошибка. Почему так может быть?
3 ноя 2015 в 11:26
Почему так может быть? — вероятно, так настроен ваш http-сервер. кстати, это может быть совсем и не uhttpd, а, например, какой-нибудь прокси-сервер. посмотрите другие возвращаемые заголовки (убрав из предложенной команды всё, начиная с | ).
3 ноя 2015 в 11:29
@banme заголовок и BOM приоритетнее: This element is only a part of the algorithm to determine the character set of a page that browsers apply. The HTTP Content-Type header and any BOM elements have precedence over this element. — developer.mozilla.org/en/docs/Web/HTML/Element/meta
– user177221
12 ноя 2015 в 9:28
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Проверьте в какой кодировке сам документ index.html Откройте его к примеру в Notepad++ вкладка КОДИРОВКА и выберете UTF8 без BOM . После перезалейте на сервер.
Отслеживать
473 2 2 золотых знака 8 8 серебряных знаков 28 28 бронзовых знаков
ответ дан 12 ноя 2015 в 9:03
21 2 2 бронзовых знака
Проблема в кодировке, отдаваемой сервером в заголовках (Content-type). Ее можно изменить в конфигурационном файле сервера (для apache httpd.conf), или в случаях, если он не доступен на хостинге или поддерживает сайты в разных кодировках, то надо использовать файл .htaccess в корневой папке Вашего сайта (там, где index.html и т.п.) Если файла .htaccess нет, то просто создайте его. В нем надо указать строку:
AddDefaultCharset UTF-8
Отслеживать
ответ дан 12 ноя 2015 в 9:30
44.1k 3 3 золотых знака 35 35 серебряных знаков 66 66 бронзовых знаков
- linux
- кодировка
- сервер
- google-chrome
- utf-8
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Выставляем кодировку UTF-8
На сколько бы это глупо не казалось, но для удачного выставления кодировки необходимо выполнить целых 11(!) правил.
Хочу зарание предупредить, если какая-то из настроек в .htaccess повлечет за собой ошибку 500, это значит, что хостинг запретил менять этот параметр на сервере. В таком случае проверьте тот факт, что у Вас UTF-8 и в случае чего обратитесь к админам хостинга.
И для тех, кто попал на эту страницу с вопросами об Ajax: Ajax работает в кодировке UTF-8.
Правило №1: Указываем в HTML верстке в теге первой строчкой, кроме случаев, где мы будем использовать тег , так как он так же как и кодировка имеет приоритет над расположением, следующий код:
Правило №2: Указываем кодировку для PHP и самого файла, для этого нам необходимо выставить заголовок функцией header(). Выставляем его в самом начале нашего файла (абсолютно в самом начале), сразу после указания уровня вывода ошибок:
Правило №3: Кодировка для подключения к к БД MySQL. Устанавливается после подключения к БД и выбора бд (mysql_connect, mysql_select_db). Если у нас модуль mysql:
или улучшенный модуль mysqli:
set_charset("utf8");
Правило №4: Кодировка в .htaccess:
AddDefaultCharset UTF-8
Правило №5: Кодировка для библиотеки mb, начиная с версии php 5.4 можно не указывать, так как по умолчанию будет использоваться именно UTF-8. Ну а пока прописываем её в файле .htaccess:
php_value mbstring.internal_encoding UTF-8
Либо в самом PHP, что в итоге выполнит одни и те же действия:
mb_internal_encoding("UTF-8");
Правило №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 файлов указывается кодировка так:
@charset "utf-8";
В заключение скажу, что символы в кодировке WIN-1251 состоят из 1 байта, то есть 8 бит, а в свою очередь в кодировке UTF-8 символы могут состоять от 1 до 4 байт, всё дело в том, что кодировка UTF-8 позволяет создавать мультиязычные сайты, так как все существующие в мире символы в ней присутствуют.
Ради любопытства русская буква в кодировке UTF-8 занимает 2 байта, именно поэтому за 1 символ функция strlen возвращает длину 2, то есть 2 байта, а mb_strlen возвращает уже правильную длину в 1 символ.
Школа программирования © 2012-2023
imbalance_hero | inpost@list.ru , admin@school-php.com
account on phpforum | youtube channel
