Все что нужно знать про кодировку веб-страниц
В сегодняшней статье я постараюсь подробно рассказать о выборе кодировки для веб-страницы. Так как именно из-за кодировки у новичков довольно таки часто возникают те или иные сложности при создании веб-сайтов или установке различных скриптов и CMS.
Думаю каждый из нас сталкивался с проблемой, когда при разработке сайта на локальном компьютере все выглядело чудесно, но стоило только перенести сайт на реальный сервер, как при просмотре страниц в браузере текст был написан непонятными иероглифами! Знакома такая ситуация?
В этой статье я постараюсь расставить все точки над «и», чтобы у Вас больше не возникало ни каких сложностей с кодировкой!
Что такое «кодировка»?
Для начала давайте определимся, что такое «кодировка»! Кодировка — это таблица соответствия машинных кодов и символов алфавита. Есть какая-то последовательность машинных символов, которую умный компьютер, в соответствии с выбранной кодовой таблицей, заменяет на понятные нам буквы.
Какие кодировки бывают?
Кодировки символов делятся на два типа: универсальные (единые для всех языков) и узкого назначения. Первая группа называется unicode (utf, ucs).
Кодировки бывают 8-и, 16-и и 32-х битные. Бывают еще 7-и битные, но на сегодня это экзотика.
- 32-х битные символы - utf-32 - могут потребоваться разве что для поддержки символов больше 65535 - по документации там значатся редкие языки и различные символы. Например, древнеперсидские символы, музыкальные ноты, всякие иероглифы. Вероятность того, что нам с вами придется с ними работать, мала.
- 16-и битные символы - utf-16 - в сети встречаются. Обычно, это восточные сайты с иероглифами. Utf-16 бывает двух видов: BE (Big Endian) и LE (Little Endian). Они различаются порядком расположения байт в символе. Кстати, к utf-32 это тоже относится.
- 8-ми битные кодировки - самые распространенные и самые запутанные.
Самая "стандартная" из них - iso-8859-1 (она же latin1, она же ascii). Ее первые 127 символов присутствуют во всех остальных стандартизированных кодировках.
Среди русских 8-и битных кодировок встречаются: windows-1251 (она же cp1251), koi8-r , cp866 (она же OEM, она же DOS-кодировка, она же альтернативная кодировка ГОСТа) и iso-8859-5
Также есть 8-и битная кодировка для Unicode - utf-8. Коды символов больше 127 описываются в ней несколькими байтами - от 2 до 4. Символы ascii будут занимать по одному байту на символ. Русские буквы, как и буквы многих европейских языков с кодами символов меньше 2048, будут занимать по два байта. Коды до 65535 вписываются в три байта, а прочие - 4 байта.
Кодировок море, но на сегодняшний день для Рунета наиболее популярными являются кодировки windows-1251 и utf-8, и именно между этими кодировками стоит выбор пользователя при создании веб-странички.
Для себя я этот выбор уже сделал давно и он пал на кодировку UTF-8, так как эта кодировка намного богаче windows-1251. И вот почему: UTF-8 содержит в своей таблице соответствия такие знаки, как → ←↓↑. А в windws-1251 вместо этих символов вот что: > <v^. Передача данных на сервер через AJAX происходит в кодировке UTF-8, поэтому нет необходимости лишний раз производить перекодировку символов. Еще в utf-8 есть знак «евро»; а еще utf-8 позволяет в одном HTML-файле совмещать кучу разнообразных специфических символов, используемых в таких языках как грузинский, иврит, китайский, японский; а еще utf-8 в кодировках HTML — это правило хорошего тона.
Думаю преимущества UTF-8 очевидны и Вы в своих скриптах будете тоже использовать UTF-8!
Теперь давайте поговорим о том, как же задать правильную кодировку для файла. Для этого есть множество редакторов. Наиболее популярным среди новичков является Dreamweaver. Поэтому я наглядно покажу, как в Dreamweaver задается кодировка документа.
Создавая новый файл, обращайте внимание на то, в какой кодировке он будет создан. Для этого в окне создания нового документа File → New (Ctrl+N) воспользуйтесь кнопкой Preferences…
И посмотрите, что задано в качестве кодировки по умолчанию:
Перекодировать открытый HTML-файл в Dreamweaver можно в диалоге Page Properties, который запускается из меню Modify → Page Properties (Ctrl + J).
Выбирайте требуемую кодировку, нажимайте ОК и все, новая кодировка для документа задана.
Теперь давайте выясним, каким образом браузер понимает в какой кодировке загружен файл?
Здесь есть несколько вариантов:
1. Используя МЕТА-тег мы сами сообщаем браузеру в какой кодировке загружен файл.
Делается это так:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Данный мета-тег необходимо пеместить между тегами <head></head>. Если Вы вдруг решили изменить кодировку у файла, то не забывайте и менять этот МЕТА-тег на актуальное значение
2. При помощи файла .htaccess. Очень часто сервер принудительно задает заголовки для загруженных файлов и сообщает браузеру кодировку по умолчанию. Если такое случается, то браузер не обращает во внимание кодировку заданную в МЕТА-теге и отображает страницу в той кодировке, которую сообщил сервер. Для того чтобы отключить кодировку по умолчанию, необходимо в корне сайта создать файл .htaccess
Файл этот предназначен для дополнительной конфигурации сервера. Действие .htaccess-директив распространяется на все файлы и подкаталоги, которые находятся в том каталоге, куда вы сохранили файл .htaccess.
После того как этот файл создан, в него необходимо поместить следующую директиву:
AddDefaultCharset UTF-8
На большинстве хостингов эта директива срабатывает и файлы отдаются в нужной кодировке. Но некоторые хостинги не обращают внимание на эту директиву, поэтому для них нужно прописать следующее:
<IfModule mod_charset.c> CharsetDisable On </IfModule> AddDefaultCharset UTF-8 php_value default_charset utf-8
Если и это не помогает, то лучше обратиться в службу поддержки хостера и уточнить у него, как правильно отключить кодировку по умолчанию. Так как все это зависит от конкретных настороек сервера хостинг-провайдера.
Задание кодировки в MySQL
Если у Вас PHP-сайт, который работает с базой данных и вся информация выводится в иероглифах, то сразу после подключения к серверу необходимо выполнить запрос:
set names utf8 или mysql_set_charset('utf8');
т.е. так:
$DB_host = "localhost"; // имя сервера MySQL $DB_user = "root"; // имя пользователя MySQL $DB_pass = "pass"; // пароль на сервере MySQL $DB_name = "database"; // имя базы данных /* Соединяемся с сервером MySQL */ $db=mysql_connect($DB_host,$DB_user,$DB_pass); /* Выбираем необходимую базу данных */ mysql_select_db($DB_name, $db); /* Устанавливаем кодировку */ mysql_query('SET NAMES utf8'); /* Или так */ mysql_set_charset('utf8',$db);
Атрибут accept-charset для форм
Отдельно хотел остановиться на обработке данных пришедших от формы на сайте. Иногда бывают такие ситуации, когда обработчик формы настроен на одну кодировку, а страничка на которой находится форма имеет другую кодировку или у пользователя в браузере выставлена кодировка вручную. В таком случае обработчику будут переданы данные не в той кодировке в которой надо.
Как же решается эта проблема?
Для этих целей существует специальный атрибут для тега <form> - accept-charset
<form action="send.php" method="post" accept-charset="utf-8">
Атрибут accept-charset — устанавливает кодировку, в которой сервер может принимать и обрабатывать данные формы.
Почему-то многие веб-мастера не знают о существовании данного атрибута или просто забывают о нем и не используют в своих формах. Из-за чего возникают не приятные ситуации.
Все бы хорошо, но если бы не всеми любимый Internet Explorer, который не понимает этот атрибут и посылает данные в той кодировке, которая установлена на странице.
К счастью данный баг решается очень просто!
В форму необходимо добавить скрытое поле в котором передать значение для идентификации кодировки
<input type="hidden" name="utf8" value="☠">
Надеюсь данная статья была Вам полезна! Пишите в комментариях Ваши ситуации и способы их решения!
- Каким должен быть современный сайт на WordPress, и в чем заключается страшная ошибка многих начинающих веб-мастеров?
- Пишем свой первый плагин на jQuery
- Для чего нужна защита инфопродуктов и как её организовать?
- Загрузка файлов на сервер с помощью PHP. Основные уязвимости и способы их избежать.
- Подработка в Интернете
-
Комментарии (1)
- Сайт