Наверное, каждому вебмастеру знакома ситуация, когда после переезда, переустановки ПО на сервере, либо по какой-то другой причине, на сайте появляются кракозябры, вопросики и т.д. В данной статье я расскажу как можно исправить эту проблему (как ее избежать я описал вот здесь). Сразу скажу, что не всегда можно восстановить исходные данные, но об этом немного позже.
И так, что мы имеем? А имеем мы следующее: дамп БД и движок (форум, магазин, каталог, CMS и т.д), на котором «почему-то» все отображается не так, как бы нам хотелось.
Первое, что мы сделаем, это проверим отображение кириллицы в дампе, чтобы разобраться, как поступить дальше.
Примечание: если вместо «кракозябров» Вы наблюдаете знаки вопроса, то проблема заключается в некорректной настройке скрипта/mysql-сервера для работы с Вашей БД. В данном случае можно сразу перейти к пункту 2.1
1.1 Открываем дамп Вашей БД текстовым редактором.
Дополнение: я рекомендую использовать EmEditor. Это довольно мощный текстовый редактор, который позволяет автоматически определять кодировку(и) текста в файле.
1.2 Ищем кириллический текст.
Дополнение: быстрее всего будет найти его в таблице сообщений, что мы и сделаем. Нажимаем Ctrl + F, вводим «`post`» (вместо post вы должно ввести имя своей таблицы с сообщениями, либо другой таблицы, где хранится кириллица, без двойных кавычек) и нажимаем Enter.
1.3 Если текст читаем и отображается корректно, тогда переходим к пункту 2.1, в противном случае продолжаем с пункта 1.4.
1.4 Нажимаем File — Reload — Detect All.
Дополнение: редактор выдаст список кодировок. Если их несколько, значит разные участки дампа сохранены в различных кодировках. Перебирайте их по очереди, пока не добьетесь корректного отображения. Если кириллица так и не отобразилась, тогда попробуйте сверить строку с Вашими кракозябрами вот с этой табличкой, далее сохраняете файл дампа в кодировке со второй колонки и выполните File — Reload — Кодировка с первой колонки. Если и здесь все безрезультатно, то, по всей видимости, кириллический текст был перекодирован несколько раз и восстановить его уже невозможно. Последней надеждой может оказаться этот сервис, который поддерживает все основные кодировки, а также умеет работать в автоматическом режиме.
Дополнение № 2: возможна ситуация, когда в дампе присутствуют «кракозябры» нескольких видов, либо содержится как текст, так и «кракозябры» — это означает, что данные в Вашей БД хранятся в различных кодировках. В этом случае обрабатывать дамп нужно по частям, но это уже тема для отдельной статьи.
1.5 Мы добились корректного отображения кириллического текста в дампе, теперь можно попытаться его импортировать и подключить к движку, но я рекомендую перейти к пункту 2.1.
Вторым этапом будет настройка движка для работы в корректной кодировке. Я уже рассказывал об этом более подробно в предыдущей статье о кодировках, поэтому здесь мы опустим описания и пояснения, а сразу перейдем к технической части.
2.1. Снова открываем дамп БД и смотрим кодировку таблиц, структура и содержимое которых было записано в дамп.
Дополнение: Нажимаем Ctrl + F и вводим «CHARSET=» (без кавычек). Если значение charset отлично, от той кодировки, в которой вы сохранили дамп, тогда при импорте нужно использовать принудительное указание кодировки (читаем здесь).
2.2. Создаем БД в кодировке, которую мы только что узнали. Если кроме кодировки в дампе описано еще и сопоставление(сравнение) то запомните его.
2.3. Открываем файл инициализации соединения с БД (обычно это init.php, global.php, connect.php db.php и т.д) и делаем следующее:
Примечание: в vBulletin функция указания явной кодировки уже описана в includes/class_core.php, Вам необходимо только раскомментировать следующую строку в includes/config.php:
//$config[‘Mysqli’][‘charset’] = ‘utf8’;
и заменить utf8 на cp1251, если Ваш дамп в cp1251.
Для других движков сразу после db_connect добавляем:
mysql_query(«SET NAMES ‘X’ COLLATE ‘Y»»);
где X — кодировка БД, Y — сопоставление. (если Вы не знаете сопоставления, тогда удалите из запроса «COLLATE ‘Y'»).
2.4. Восстанавливаем дамп БД.
Дополнение: при восстановлении БД рекомендую пользоваться скриптом SypexDumper.
Вот, собственно, и все. С удовольствием выслушаю любую критику, а также отвечу на вопросы в комментариях.
Приветствую Предлагаю обмен ссылками (постовыми) вашего блога blog.older.su с моим.
Заранее благодарен за ответ.
С уважением, Александр.
А у меня не получилось. Редактор не показал русские символы, какую кодировку я не выбирал. Вот онлайн сервис определил и отобразил русские символы но толку? Кусками перекодировал и вставлял в редактор, в итоге дампер отказался заливать дамп, ссылаясь на ошибку в данных.
При открывании дампа в кодировке ЮТФ-8 (именно так база настроена, но все посты в вин1251) вижу вот такие символы ‘Информирует о Ñообщении’
забыл дописать, что сами посты в редакторе отображаются уже в другой кодировке: (‘moderator’,’Ìîäåðàòîðû’,3,»,0)
Необходимо пересохранять дамп в другой кодировке опираясь на данные из таблицы.
Спасибо друг. Благодаря твоей статье смог перекодировать на одном из сайтов базу сохраненную в 1252 и оторажаемую как UTF8 в нормальный вид, теперь в phpmyadmin нормально все отображается и на сайте тоже.
Долго искал решение, вот тут частично нашел.
Сделал дамп.
Открыл, сохранил в вин1252, переоткрыл в UTF8 и вуаля дамп стал нормальный, залил дамп обратно в базу.
Удачи, уважаемый.
Благодарю, и Вам удачи. = )
А что делать если форум по основному домену работает нормально, а на зеркале кракозябры на белом фоне ?
Хостинг покупал на http://www.toobit.ru
Может причина у провайдера ?
Вот что то типа такого:
&zjжCpKђКNЬ)tШЫЦнV—pµ%+ar1Y…ѕxФюЎsшмL /yщr“+©(]ўўWьЎОеА‡IдЯ3)си’жN’H“ ®ў‘1вБ†Њ&‹#HЕ8pЖЊ¶ ©ж*iиV-*гцBSнWRЪ«Wыы•р‚›ѓГ5@У*t›™кl8UD№7Mfаа{г~ћ2‚Ш™3є¬љ4CAn%grdЅКЩ©¬jfAхЇщЅ™Л–VМѓбш|њ$·вeLџ·ПЫЇh^yHФћѓє¬ВCe%І^%*«<Ёю-dK+рАфHp{QЮЩьх‚EжЖФп-Сћ+4©Й®l№{П-‡1±М,©а”GD,g$ч–Е$ чк: Ї
ч2ИїЖЉЄ‡diOЌ±ЉъєшкUA•CEK¦n%®Ё®iР6hЁРґWI‡v&ISs…bѕPјщЦYХ‰HXЛґЅТ ТІж’BЁыFюHЕ‰ИЉoЌЅY]ЭЇ(.ткќпќv©¦n«°кЊ?щу|ЪЁшкЂюs+ѓ№Wх·B]·ґXЈ‚м кPkї]0KІИaКЄAr§Щ»e«ifкјl
Смотреть нужно. Зеркала на разных серверах?
Это что-то со скриптом, не в кодировке дело.
Статья канешно очень хорошая и в ней много полезного, один раз разобрался, но теперь уже не смог так как не пойму проблему!
Автор у меня есть большая просьба к тебе, прошу удели мне немного внимания, вот мой скайп:baiet_rau_nicu , пожалуста добавься :)!
Отписал. = )
отличная статейка