Кодировка файлов

О превосходстве кодировки utf-8 над windows-1251 я уже слышал давно, но не предавал этому значения, так как проблем с отображением текста web страниц ни когда не возникало.
Вернее, проблемы-то были, но они всегда решались одним из трёх верных способов, о которых и пойдёт речь.

Кодировка utf-8

UTF-8 (от англ. Unicode Transformation Format — формат преобразования Юникода) — в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста. Нашла широкое применение в операционных системах и веб пространстве. В Unicode насчитывается свыше 100 000 символов.

Кодировка Windows-1251 (синоним CP1251)

Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Пользуется довольно большой популярностью. Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографии для обычного текста (отсутствует только значок ударения); она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского и болгарского. Общее количество символов порядка - 256 шт.

Отличие кодировок

Главное отличие кодировок - это количество символов и здесь явно лидирует UTF-8.
Наверно, единственный плюс кодировки windows-1251 – она однобайтовая, следовательно, занимает меньший объём. Но сегодня, когда дисковое пространство измеряется гига-тера-байтами, вряд ли, кто-то будет считать байты.
И еще одно  обстоятельство, которое меня окончательно убедило использовать кодировку UTF-8 – это технология AJAX, которая не поддерживает windows-1251.
Так, что если Вы еще не определились, какую кодировку использовать для Ваших web страниц, то советую остановиться на Юникоде (UTF-8), что бы в дальнейшем не пришлось переводить весь сайт с кодировки windows-1251 на utf-8.

Перекодировка файлов в utf-8 в три шага

  1. Кодировка страниц.
  2. Для того, что бы сменить кодировку страницы, необходимо открыть файл в Adobe Dreamweaver и в окне «свойства страницы» установить нужную кодировку и нажать OK.

    смена кодировки


    меняем кодировку в Adobe Dreamweaver

    Ни каких галочек BOM ставить не надо.


    Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа,
    сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто
    называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут
    автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой
    могут некорректно обрабатываться старыми программами, в частности xml-анализаторами.


    Можно так же использовать текстовый редактор NotePad++,

    смена кодировки в notepad++

    но при этом не забывайте изменять запись в <head>:

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

    Dreamweaver это делает автоматически.

    А что же делать, если вы наклепали сотню другую html - файлов, прежде чем узнали о превосходстве кодировки UTF-8?

    В ручную с помощью вышеупомянутых программ перекодировать все файлы отнимет уйму времени. Да и выполнять однообразную работу по смене кодировки в html- файлах вряд ли кому-то доставит удовольствие.

    Думаю, с этой проблемой сталкиваются многие начинающие web мастера (скажу честно, я не исключение). Поэтому и выкладываю решение данной задачи.

    Меняем кодировку текста у всех HTML файлов в одной директории (папке).

    Создаем файл "recode.php"
    <?php
    define('LOWERCASE',3);
    define('UPPERCASE',1);
    function detect_cyr_charset($str) { // функция определения кодировки
    	$charsets = Array('k' => 0, 'w' => 0, 'd' => 0, 'i' => 0, 'm' => 0);
    	for ( $i = 0, $length = strlen($str); $i < $length; $i++ ) {
    		$char = ord($str[$i]);
    		//non-russian characters
    		if ($char < 128 || $char > 256) continue;
    		//CP866
    		if (($char > 159 && $char < 176) || ($char > 223 && $char < 242))
    		$charsets['d']+=LOWERCASE;
    		if (($char > 127 && $char < 160)) $charsets['d']+=UPPERCASE;
    		//KOI8-R
    		 if (($char > 191 && $char < 223)) $charsets['k']+=LOWERCASE;
    		if (($char > 222 && $char < 256)) $charsets['k']+=UPPERCASE;
    		//WIN-1251
    		if ($char > 223 && $char < 256) $charsets['w']+=LOWERCASE;
    		if ($char > 191 && $char < 224) $charsets['w']+=UPPERCASE;
    		//MAC
    		if ($char > 221 && $char < 255) $charsets['m']+=LOWERCASE;
    		if ($char > 127 && $char < 160) $charsets['m']+=UPPERCASE;
    		//ISO-8859-5
    		if ($char > 207 && $char < 240) $charsets['i']+=LOWERCASE;
    		if ($char > 175 && $char < 208) $charsets['i']+=UPPERCASE;
    	}
    	arsort($charsets);
    	return key($charsets);
    }
    ?>
    <?php 
    if(isset($_POST['go'])) {
    	$dir = './';
    	$files = scandir($dir); // сканируем папку в которой лежит файл "recode.php"
    	foreach($files as $file) {
    		if((stristr($file, '.htm')) or (stristr($file, '.html'))) { // выбираем файлы с расширением .htm и .html
    			$html = file_get_contents($dir.$file);
    			if (detect_cyr_charset($html)!='w') continue; // проверяем кодировку
    			$html=iconv("cp1251", "utf-8", $html);
    			$html = preg_replace("'charset=windows-1251'si", "charset=utf-8", $html, 1);
    			file_put_contents($dir.$file, $html);
    			echo $file.' - OK! Перекодирован в utf-8<br>';
    		}
    	}
    	file_put_contents($dir.'.htaccess', '
    	AddDefaultCharset utf-8',FILE_APPEND);
    }
    ?>
    <center>
    <form style="margin:100px auto;" method="POST" id="form" name="form" action="recode.php">
    <input type="hidden" name="go">
    <input name="botton" type="submit" value="ПЕРЕКОДИРОВАТЬ HTML ФАЙЛЫ" />
    </form>
    </center>
    

    Затем отправляем этот файл на сервер в ту папку, где находятся HTML страницы в кодировке Windows-1251
    Теперь остаётся только открыть файл "recode.php" в любом удобном для вас браузере и нажать кнопку.

    перекодировка текста
    Через секунду или две все файлы с разрешением .html и .htm поменяют кодировку с windows-1251 на utf-8.

    А в конфигурационный файл ".htaccess" пропишется кодировка по умолчанию UTF-8.
    Хочу заметить, что это всё возможно только при поддержке сервером технологии PHP.

  3. Настройка кодировки по умолчанию для сервера.

  4. Для настройки сервера необходимо создать (если файла нет) в любом текстовом редакторе файл с именем .htaccess (с точкой в начале).
    Прописать в нем одну строку:

    AddDefaultCharset utf-8
    

    И сохранить файл в корневой директории (там же где и index).

    .htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache,
    а также подобных ему серверов. Позволяет задавать большое количество дополнительных
    параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких
    как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения
    главного конфигурационного файла.


  5. Кодировка базы данных MySQL.

  6. Для отображения правильного, читабельного текста в таблицах базы данных, а так же при выводе данных на веб страницу необходимо полное соответствие кодировок.
    Решается это внесением дополнительной строки перед закрывающемся тегом ?> в PHP код  подключения к базе данных:
    @mysql_query("SET NAMES 'utf8'");  //- для кодировки UTF-8

    или
    @mysql_query("SET NAMES 'cp1251'");  //-  для кодировки windows-1251

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

Комментарии по теме: "Кодировка файлов".

  1. автор Евгений

    Виктор, установите новую версию программы. А старую потом можно будет удалить.

  2. автор Виктор

    Я использую Macromedia Dreamweaver 8. Неделю назад вдруг вместо русского текста в строке меню весь текст изменил кодировку и я не знаю, как вернуть все обратно на русский.

    Вы не подскажете, как исправить положение? Если возможно, ответьте и на мой имейл.

    Спасибо.

  3. автор Вова

    Ирина, UTF сейчас больше любят поисковики! Хотя если вам не нужна популярность, то оставайтесь в Win :)

  4. автор Евгений

    UTF-8 — одна из общепринятых и стандартизированных кодировок текста. Стандарт UTF-8 официально закреплён в документах RFC 3629. Кодировка нашла широкое применение в UNIX-подобных операционных системах и веб-пространстве.
    Пока Ваш сайт состоит из HTML страничек с табличной вёрсткой(ширина страниц разная), беспокоится не стоит. Но по мере развития web сайта вы сталкнётесь с PHP, JS, технологией AJAX. И вот тут-то могут возникнуть проблемы

  5. автор Ирина

    На моём сайте страницы в вин-1251, а 2 или 3 в УТФ. Так вроде всё работает. Скажите пожалуйста с какой целью переводить всё на УТФ? На перспективу? Спасибо.

  6. автор Николай

    Обалденная штука и всё понятно объяснили!!! Очень помогли я после нового билинга с обновлением намучился с кадрировкой))) Спасибо что вы есть!!!

  7. автор Татьяна

    Спасибо за отличную информацию! Хороший сайт, отличный дизайн, удобно просматривается с смарфона, отлично изложен материал-легко читается! Автору респект!

  8. автор Александр

    Потерял 3 часа с кодировками после переустановки Денвера. Но после этой статьи все сразу стало на место. Спасибо ...

  9. автор юзер1

    очень помогла информация о кодировке базы данных MySQL. До этого неделю сидел безрезультатно, а скрипт неправильно отображал текст с БД.

  10. автор Евгений

    Большая просьба, оставлять сообщения только по данной теме. Спам, реклама и т.д. будут удаляться.

Добавить комментарий