Кодировка для сайта. Какую выбрать? Как сменить?

Если Вы уже начали свой Web проект, или собираетесь начать программировать Web приложения. И Ваш проект подразумевает русский язык – вам следует сразу для себя решить один вопрос – вопрос кодировки. Очень зловещий и раздражительный в некоторых случаях вопрос. Чем раньше вы задумаетесь о нем – тем лучше.

Кодировка – как способ подачи отображения символов. В таблице ASCII – 255 символов. Но отображаться на различных языках может много больше. Так один и тот же код – может обозначать знак, либо загогулину в зависимости от кодировки. Однозначно определить кодировку нельзя, можно лишь догадаться, что с конкретной кодировкой – отображение идет самым понятным образом.

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

Мы будем использовать для себя либо Windows-1251, либо UTF-8. Почему-то во всех программах по умолчанию стоит Windows-1251, и все продолжают кодировать в ней. А после начинают иногда мучаться. Впрочем, идеальной кодировки не существует. Есть наиболее подходящая под конкретный случай.

Чем UTF-8 отличается от Windows-1251?

Прежде всего – каждый символ – это не 1, а 2 байта. По этому – размер файлов увеличивается практически в 2 раза. Размер передаваемых данных тоже увеличивается. Это плохая сторона медали.

Хорошая сторона - За счет избыточного набора символов – в UTF-8 – 65000 возможных символа. Отличный вариант, если вы делаете многоязыковое приложение, у вас не будет проблем с отображением перевода

Многие браузеры по умолчанию используют кодировку UTF-8. По этому, отправляя данные через AJAX– вам больше не придется конвертировать русские значения переменных на стороне сервера. Если Вы собираетесь в полной мере использовать Аякс в своем приложении – Вам желательно перейти на UTF-8 с самого начала.

PHPхорошо работает с кодировкой Windows-1251. Т.к она состоит из 1 байта и все выполняется легко. Если же вы решите использовать операции с подсчетом символов – они покажут вам честное число байт. По этому – для русских строк в кодировке UTF-8 – используется набор операторов, начинающихся с mb_

В PHP.iniдолжен быть также подуключени и установлен модуль mbstring (multibytestring). Он установлен в 99% хостингов. Просто замените все строковые операторы на mb_...

JSON– также использует по умолчанию кодировку UTF-8. Чтобы правильно передать надпись в другой кодировке – Вам придется сочинять функцию конвертации для массивов. Подробнее об этом - ранее

Практика. Если Вы осознали необходимость смены кодировки

Первым делом, приступая к смене кодировки - Сохраните все файлы проекта.

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

Выставите предварительно права на запись к папке.

Вот собственно – сам скрипт. Записал, но не проверял. Должно работать )

<?php
define('FROM_CHARSET','windows-1251');
define('TO_CHARSET','UTF-8');
mass_to_utf8('.'); // путь к основному каталогу. Сейчасуказан- текущий
function mass_to_utf8($folder){
    $dir=opendir($folder);
    while($file=readdir($dir)){
        if ($file == '.' || $file == '..') continue;
        if (!in_array(substr($file,-4,4),array('.php','.tpl'))) continue;
        $way=$folder.'/'.$file;
        if (is_dir($way)){
            mass_to_utf8($way);
        }elseif (is_file($way)){
            // convert
            file_put_contents($way,iconv(FROM_CHARSET,TO_CHARSET,file_get_contents($way)));
        }
    }
}
die 'done';

Незабудьте также сменить кодировку в php файлах в команде headers (если такая была) и в meta тегах основного шаблона, если там была указана кодировка, а также в файле .htaccess, опять же, если там кто-то мог поставить принудительную установку кодировки

Успехов в выборе правильной кодировки и налаживании одного языка со всеми платформами.

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

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 1777
  • Комментариев: 0
  • Создан: 28.12.2012 14:49

Комментарии (0)