Code: Select all
ALTER DATABASE `database_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
2. Перед тем, как импортировать базу данных, открываем дамп в тесктовом редакторе и проверяем его на отсутствие кракозябр. Если кракозябры в нем присутсвуют, то импортировать такой файл без изменений ничего не даст, импорт его не вылечит! Кракозябры в дампе возникают либо, если база с самого начала криво была настроена, либо экспорт был выполнен некорректно. Как вылечить кракозябры в дампе? Созданием здорового дампа без кракозябр или заменой кракозябр на соответствующие буквы. Я заменяю простым редактором, в котором можно сделать поиск и замену в тексте. Ищем кракозябру, заменяем на букву.
2a. Независимо от наличия или отстуствия кракозябр, заменяем все
Code: Select all
DEFAULT CHARSET=!!ДРУГАЯ КОДИРОВКА!!;
Code: Select all
DEFAULT CHARSET=utf8;
3. Проверяем в какой кодировке файл в этом редакторе сохраняется. В некоторых редакторах можно уточнить кодировку файла при его сохранении. Лучше всего сохранить файл в кодировке utf8, хотя это не так уж и важно. Важно только знать, в какой кодировке файл будет сохранен редактором для следующего шага.
4. При импорте базы данных через PHPMyAdmin выбираем соотвествующую кодировку файла в поле. Гаданием НЕ занимаемся, берем то, что было задано в шаге 3. Если не знаем, в какой кодировке файл был сохранен, то возращаемся к шагу 3 и учимся сохранять файлы в нужной кодировке.
5. После импорта проверяем, чтобы все таблицы, и все текстовые поля в базе имели сравнение utf8_general_ci (колонка сравнение в PHPMyAdmin). Если это не так, то возращаемся к шагу 1 и шагу 2а.
5а. Открываем любую таблицу с текстом и проверяем на наличие кракозябр. Если их НЕ было в дампе, то возращаемся к шагу 3. Если они были в дампе, то возращаемся к шагу 2.
6. Соединение с базой данных должно идти в utf8. Соединение не имеет никакого отношения к сравнению таблиц (колонка сравнение в PHPMyAdmin). Соединение может быть в UTF8, а таблицы в latin-swedish и наоборот. По умолчанию, при установке MySQL на сервере выставляется соединение latin-swedisch и если хостер тупой, то он это значение не изменяет и каждый клиент на сервере начинает биться с кодировками. В CMS Made Simple эта проблема решается выставлением
Code: Select all
#This is a mysql specific option that is generally defaulted to true. Only
#disable this for backwards compatibility or the use of non utf-8 databases.
$config['set_names'] = true;
7. Во всех HTML шаблонах должно стоять.
Code: Select all
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Code: Select all
{$entry->title|escape:'html'}
Code: Select all
{$entry->title|escape:'html':'utf-8'}
Администрирование сайта » Общие настройки, закладка Дополнительные настройки. Кнопка "Очистить кэш".
................................................................................................
Написано для тех, кто хочет понять, почему нет однозначного решения для "ломаной кодировки". Проблема может возникнуть на любом этапе!
...............................................................................................
Вылечился сам - помоги вылечиться другим! Дописываем сюда важные моменты, которые я возможно не учла.