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

Если Вы уже начали свой 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
  • Просмотров: 1937
  • Комментариев: 0
  • Создан: 28.12.2012 14:49

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

Ваши предложения и пожелания пишите на pro@kosmom.ru

Теги

ajax axios backup bootstrap core framework eloquent excel home project html ios javascript keep-alive kpi laravel legacy mvp orm php rip scroll solid timestamp undefined vue vuetify watch безопасность биометрический паспорт ваша любаша для путешествий загран на 10 лет загран паспорт загранпаспорт нового образца зимние книги как заполнить анкеты кеширование книги на новый год логирование мцф недвижимость новогодние книги образец заполнения антеты паспорт для путешествий паспорт нового поколения печать продукт проектирование прокси разработка ремонт ремонт в апартаментах ремонт нежилого помещения самокат сдача сколько стоил ремонт апартаментов спорт стандарты таблица финансы хостинг цена ремонта что почитать зимой юзабилити

Случайный пост

29.07.2016 08:50
Просмотренные фильмы №13