Не буду вас томить.
Дело было в том, что в БД информация закодирована двумя кодировками, сначала в latin1, а потом cp1251 (а всё из-за того что когда-то, когда я был зелен и юн, я накосячил при установки IPB, сам того не подозревая). Так вот, о том как же исправить сей досадный ляп будет написано ниже. Перед тем как приступить ОБЯЗАТЕЛЬНО сделаейте бэкап вашей базы (на всякий случай, потому что как известно случаи бывают разные).
Приступим пожалуй:
1. Для начала необходимо изменить utf8 кодировку для всех таблиц. Это можно сделать ручками, выполнив команду:
ALTER TABLE`ibf_posts` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;Для каждой таблицы сделать такой запрос (можно сделать сразу всё в phpMyAdmin).
Но! Но мы ведь вам не хочется писать это для каждой таблицы? Если да, то специально для таких был написан простейший скрипт на php полностью автоматизирующий эту процедуру:
<?php // Database info include("conf_global.php"); $dbhost = $INFO['sql_host']; $dbuser = $INFO['sql_user']; $dbpass = $INFO['sql_pass']; $dbname = $INFO['sql_database']; //--------------- header('Content-type: text/plain'); $dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() ); $db = mysql_select_db($dbname) or die( mysql_error() ); $sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci"; $result = mysql_query($sql) or die( mysql_error() ); print "Database changed to UTF-8.\n"; $sql = 'SHOW TABLES'; $result = mysql_query($sql) or die( mysql_error() ); while ( $row = mysql_fetch_row($result) ) { $table = mysql_real_escape_string($row[0]); $sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; mysql_query($sql) or die( mysql_error() ); print "$table changed to UTF-8.\n"; } mysql_close($dbconn); ?>Копируем это, создаем файл, к примеру, 1.php и закидываем в папку с форумом. Теперь запускаем его xttp://ваш_форум/1.php. И смотрим как скрипт меняет кодировку на utf8.
2. Следующим этапом будет восстановление правильной кодировки для вашей базы данных.
На данном этапе необходимо экспортировать базу данных (можно сделать средствами phpMyAdmin, sypex Dumper или же ручками через SSH). После того как база сохранена, воспользуемся замечательной утилитой iconv (для тех кому интересно могут почитать о ней в интернете).
С помощью этой утилиты необходимо сделать двойное преобразование кодировки:
iconv -c -f utf8 -t latin1 your_DB.sql > test iconv -f cp1251 -t utf8 test > finalНу вот и всё. Кодировка успешно сменилась на правильную. Осталось только импортировать базу обратно, любыми средствами (phpMyAdmin, sypex Dumper или же ручками через SSH).
3. Если при обновлении у вас не такая ошибка, то просто воспользуйтесь подробным мануалом по обновлению до 3 версии.
На этом всё.