XF 1.5 Проблема с кодировкой после переезда с VB 3.8

Статус
В этой теме нельзя размещать новые ответы.

butik

Проверенные
Сообщения
98
Реакции
36
Баллы
5,515
Здравствуйте.

Есть форум рабочий на VBULLETIN V3.8 база у воблы в кодировке utf-8_general_ci
Конвертнул базу vb 3.8 на свежеустановленный xenforo 1.5.10
Весь процесс длился более часа, в итоге на форуме вместо русских букв странные крякозабы.
---.png
Ребята подскажите как можно привести в порядок базу?

---

UPD

Можно было и дальше пробовать возиться и пробовать импортировать и экспортировать базу с разными режимами (были задействованы sympex dumper pro, navicat, phpmyadmin, textpipe pro, sublime text 2, notepad++ и т.д.) и тратить свое время на неуспешные конвертации...

Решение:
Как оказалось от разработчиков нас поджидает "пасхалочка" в стандартном скрипте импорта, если не поправить то можно впустую потерять немало времени в зависимости от обьема базы.

Конвертировал vBulletin в Xenforo и столкнулся с проблемой, что даже при указании явной кодировки utf-8 при импорте, и корректном хранении всех данных vBulletin в utf-8, всё равно получаем кракозябры после импорта. После недолгих поисков в одном из скриптов импортера, а именно library/XenForo/Importer/Abstract.php была найдена функция _convertToUtf8, которая все импортируемые данные "насильно" пытается конвертировать в utf-8, чем и вызывает вышеупомянутую проблему. Следовательно, отучаем её это делать. = )

Из файла library/XenForo/Importer/Abstract.php вырезаем следующий кусочек кода:

PHP:
// note: assumes charset is ascii compatible

if (preg_match('/[\x80-\xff]/', $string))
{
if (function_exists('iconv'))
{
$string = @iconv($this->_charset, 'utf-8//IGNORE', $string);
}
else if (function_exists('mb_convert_encoding'))
{
$string = mb_convert_encoding($string, 'utf-8', $this->_charset);
}
}
Источник:

Судя по коду, это было давно и разработчики немного сменили код, но со старой проблемкой, пофиксил в актуальной версии xenforo и получилось так (закоментил участок)

PHP:
    protected function _convertToUtf8($string, $entities = null)
    {
        // note: assumes charset is ascii compatible
    /*    if (preg_match('/[\x80-\xff]/', $string))
        {
            $newString = false;
            if (function_exists('iconv'))
            {
                $newString = @iconv($this->_charset, 'utf-8//IGNORE', $string);
            }
            if (!$newString && function_exists('mb_convert_encoding'))
            {
                $newString = @mb_convert_encoding($string, 'utf-8', $this->_charset);
            }
            $string = ($newString ? $newString : preg_replace('/[\x80-\xff]/', '', $string));
        } */

        $string = utf8_unhtml($string, $entities);
        $string = preg_replace('/[\xF0-\xF7].../', '', $string);
        $string = preg_replace('/[\xF8-\xFB]..../', '', $string);
        return $string;
    }
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
В phpmyadmin содержимое постов также с каракозябами вместо русского.
Первоначально с кодировкой VB3 был порядок? В таблице при utf-8 все читалось нормально? Ну или тупо открой дамп vb3 и посмотри в блокноте - текст или значки.
 
...
Есть форум рабочий на VBULLETIN V3.8 база у воблы в кодировке utf-8_general_ci ....
Кодировка utf8_general_ci у рабочего VB v3.8 форума, русский там корректно отображается.

1234567.png

----------

Вот содержимое у xenforo после конвертации, база в кодировке utf8_general_ci

22222222222222.png

Скриншот на момент после окончания конвертирования (никаких лишних манипуляций над базой не проводилось)

На сайте sypex dumper есть статья как конвертнуть для исправления кодировки
но там упоминается проблема когда база в кодировке latin1 и отображается крякозябами в многочисленном там "D" :eek:

У меня же кодировка некоректная и отоброажается вместо русского крякозябы в большинстве там присутствует "P" и "C"

Спасибо за внимание, решение найдено. Первый пост дополнен.
 
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу