Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

Fireboa 1.0.0 в phpbb 2.0.22, проблема с кириллицей

Форум для авторов модов для phpBB 2.0.x.
jurasiks
phpBB 1.0.0
Сообщения: 1
Стаж: 11 лет 9 месяцев

Fireboa 1.0.0 в phpbb 2.0.22, проблема с кириллицей

Сообщение jurasiks »

Задаю этот вопрос в разделе 3.0 так как 2.0.22 у меня только как промежуточная версия для перехода на 3.0.

Итак, есть старый форум FireBoard (joomla) в котором много важных сообщений.
Его надо конвертировать в phpbb 2 для начала.

Вот скрипт, который прекрасно это делает, ЗА ИСКЛЮЧЕНИЕМ кодировки.
Я экспортировал и писал сравнение вручную как utf8, но после конвертирования появляются вопросики.

Вопрос: как надо добавить сравнение в utf8 или windows1251 в скрипт ниже, что кириллица конвертировалсь правильно. Благодарю.

Вот скрипт:

Код: Выделить всё

<?php
/*
Fireboard 1.0.x to phbBB2 2.0.x converter
Based on the phpbb2tosb.php script by Olle Johansson http://mambo.theyard.org/ and from Marcos Osorno http://www.blort.com
Based upon updated script from http://www.phpbb.com/community/viewtopic.php?f=10&t=371271&p=2026820

* Tested on: phpBB 2.0.22, Joomla 1.0.13 w/ Fireboard 1.0.3, PHP 5.2.3, MySQL 5.0.45
* Tested by executing from within the phpBB directory
* Will DESTROY all the data in your phpBB db and replace it with SB data! Does not append!

-------------Config---------------------*/
//MySQL Database host - usually 'localhost'
    $host='localhost';

//MySQL Database user
   $user='root';

//MySQL Database password
   $pass='1234';

//MySQL Database name
   $db='phpbb2';

// Mambo database prefix
    $mosConfig_dbprefix = "jos_";

// phpBB2 database prefix
    $phpbb_dbprefix = "phpbb_";

// Temp DB prefix used for temporary tables in the script
// set this to a prefix you are NOT using on your mySQL db
    $temp_dbprefix = "temp_";
/* ---------------------------------------*/
    define("BBCODE_UID_LEN", 10);
    $bbcode_on = 'true';

    ini_set("magic_quotes_gpc", "1");
    set_magic_quotes_runtime ( 0 );

   echo "<?xml version=\"1.0\"?>";
   echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
   echo "<html xmlns=\"http://www.w3.org/1999/xhtml\">";
   echo "<head>";
   echo "<title>Importing data from Fireboard</title>";
   echo "<meta http-equiv=\"Content-Type\" content=\"text/html; iso-8859-1\" />";
   echo "</head>";
   echo "<body>";
   echo "<h1>Importing data from Fireboard</h1>"; flush();

//Connect to and select Database
    echo "Connecting to Database...\n"; flush();
    $lnk = mysql_connect($host, $user, $pass) or die ('Not connected: ' . mysql_error());
    mysql_select_db($db, $lnk) or die('Error: '.mysql_error());
    echo "OK\n"; flush();

// PHPBB Categories > Forums > Topics > Posts > Posts Text

// Part One - Populate Categories
    echo "<br />Populating Categories...\n"; flush();
// Import the main categories
// Prune those Fireboard categories which have a parent
// Multiply the ordering by 10 to conform to phpbb2 format
// if fb_categories.parent = 0 then category is a phpbb cateogory

//clear phpbb categories table
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}categories";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

// if fb_categories.parent = 0 then category is a category
    $query = "INSERT INTO {$phpbb_dbprefix}categories (cat_id, cat_title, cat_order)
           SELECT id, name, ordering*10
           FROM {$mosConfig_dbprefix}fb_categories
           WHERE {$mosConfig_dbprefix}fb_categories.parent = '0'
           ORDER by ordering";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

//Count Rows Inserted
   $query = "SELECT COUNT(*)
           FROM {$phpbb_dbprefix}categories;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Rows... OK"; flush();

// clear phpbb forums table
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}forums";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

// Part Two - Populate Forums
// phpbb2 considers category header messages as forums
// these are indicated in sb by setting fb_messages.id=sb_messages.thread
// the actual messages can be detected by seeing that fb_messages.parent != 0
   echo "<br />Populating Forums...\n"; flush();
    $query = "INSERT INTO {$phpbb_dbprefix}forums (forum_id, cat_id, forum_name, forum_desc, forum_status, forum_order, forum_posts, forum_topics, forum_last_post_id, prune_next, prune_enable, auth_view, auth_read, auth_post, auth_reply, auth_edit,auth_delete, auth_sticky, auth_announce, auth_vote, auth_pollcreate, auth_attachments)
           SELECT id, parent, name, description, 0, ordering, c.posts, b.topics, d.last, NULL, 0, 0, 1, 1, 1, 1, 1, 3, 3, 1, 1, 0
           FROM {$mosConfig_dbprefix}fb_categories
           LEFT JOIN (SELECT catid, COUNT(*) AS topics FROM {$mosConfig_dbprefix}fb_messages WHERE id=thread GROUP BY catid) b
           ON {$mosConfig_dbprefix}fb_categories.id=b.catid
           LEFT JOIN (SELECT catid, COUNT(*) AS posts FROM {$mosConfig_dbprefix}fb_messages GROUP BY catid) c
           ON {$mosConfig_dbprefix}fb_categories.id=c.catid
           LEFT JOIN (SELECT catid, MAX(id) AS last FROM {$mosConfig_dbprefix}fb_messages GROUP BY catid) d
           ON {$mosConfig_dbprefix}fb_categories.id=d.catid
           WHERE parent != 0
           GROUP BY id;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

//Count Rows Inserted
   $query = "SELECT COUNT(*)
           FROM {$phpbb_dbprefix}forums;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Rows... OK"; flush();

// Part Three - Populate Topics
// if fb_messages.parent = 0 then messages is a topic
   echo "<br />Populating Topics...\n"; flush();
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}topics";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

       // Some messages still had the single quote in them without a \
    // which was causing import problems so we
    // removed the single quote and replaced it with HTML for the quote
   // Run a query taking simple board messages and finding which are topics by thread=id then merge with count table above
    // also subtract one from the reply count because it counts itself under this algorithm
    $query = "SELECT m.id, m.catid, m.userid, m.subject, m.time, m.hits, reply - 1 AS reply, locked, '0', '0', c.min, c.max, '0'
           FROM {$mosConfig_dbprefix}fb_messages AS m
           JOIN (SELECT thread, MIN(id) AS min, MAX(id) as max, COUNT(id) as reply
           FROM {$mosConfig_dbprefix}fb_messages GROUP BY thread) c
           WHERE m.thread=m.id AND m.parent=0 AND c.thread=m.thread";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    while ( $row = mysql_fetch_object( $result ) ) {
      $subject = stripslashes( $row->subject );
      $subject = preg_replace ('/\'/', '\\\'', $subject);
      $query = "INSERT INTO {$phpbb_dbprefix}topics(topic_id, forum_id, topic_poster, topic_title, topic_time,topic_views, topic_replies, topic_status, topic_vote, topic_type,topic_first_post_id, topic_last_post_id, topic_moved_id)VALUES ('$row->id', '$row->catid', '$row->userid', '$subject', '$row->time','$row->hits', '$row->reply', '$row->locked', '0', '','$row->min', '$row->max', '0')";
      $updateresult = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    }
    mysql_free_result($result);

//Count Rows Inserted
   $query = "SELECT COUNT(*)
           FROM {$phpbb_dbprefix}topics;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Rows... OK\n"; flush();

// Part Four - Populate Messages Table
    echo "<br />Populating Posts...\n"; flush();
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}posts";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    $query = "INSERT INTO {$phpbb_dbprefix}posts (post_id, topic_id, forum_id, poster_id, post_time, poster_ip, post_username, enable_bbcode, enable_html, enable_smilies, enable_sig, post_edit_time, post_edit_count)
           SELECT id, thread, catid, userid, time, HEX(INET_ATON(ip)), name, 1, 0, topic_emoticon, 1, NULL, 0 FROM {$mosConfig_dbprefix}fb_messages";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   $query = "SELECT COUNT(*) FROM {$phpbb_dbprefix}posts;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Rows... OK"; flush();

//Populate Messages_Text Table
    echo "<br />Populating Post Text & Converting Fireboard Syntax to phhBB Syntax... (This may take a while)\n"; flush();
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}posts_text";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   $query = "SELECT m.id, m.subject, t.message
           FROM {$mosConfig_dbprefix}fb_messages_text AS t, {$mosConfig_dbprefix}fb_messages AS m WHERE m.id = t.mesid";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

// uses phpbb's bbcode encoder to make a uid for each message
// which is required for the bbcode to work in phpbb
    while ( $row = mysql_fetch_object( $result ) ) {
      $bbcode_uid = ( $bbcode_on ) ? make_bbcode_uid() : '';
      $message = prep ( $row->message);
      $message = fixquotes ($message);
      $subject = stripslashes( $row->subject );
      $subject = preg_replace ('/\'/', '\\\'', $subject);
      $query = "INSERT INTO {$phpbb_dbprefix}posts_text (post_id, bbcode_uid, post_subject, post_text)
              VALUES ('$row->id','$bbcode_uid', '$subject', '$message')";
       $updateresult = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    }
    mysql_free_result($result);

//Count Rows Inserted
   $query = "SELECT COUNT(*) FROM {$phpbb_dbprefix}posts_text;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Rows... OK\n"; flush();

//Populate Users Table , Note user_sig_bbcode_uid is a radom, md5 checksum
    echo "<br />Populating Users Table From Joomla...\n";
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}users";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    $query = "INSERT INTO {$phpbb_dbprefix}users (user_id, user_active, username, user_password, user_session_time, user_lastvisit, user_regdate, user_level, user_dateformat, user_email)
           SELECT id,
            CASE block
               WHEN 0 THEN 1
               ELSE 0 END,
            username,
            password,
            UNIX_TIMESTAMP(lastvisitDate),
            UNIX_TIMESTAMP(lastvisitDate),
            UNIX_TIMESTAMP(registerDate),
            CASE gid
               WHEN 25 THEN 1
               WHEN 24 THEN 1
               ELSE 0 END,
               'd M Y H:i',
               email
         FROM {$mosConfig_dbprefix}users ORDER by id;";
   $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   $query = "SELECT COUNT(*) FROM {$phpbb_dbprefix}users;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);
    echo "<br />Inserted $count Users... OK\n"; flush();

//Update Info From Fireboard
   echo "<br />Updating Users Table From Fireboard...\n";
    $query = "UPDATE {$phpbb_dbprefix}users, {$mosConfig_dbprefix}fb_users
           SET user_posts=posts, user_avatar=avatar, user_icq=ICQ, user_website=websitename, user_from=location, user_sig=signature, user_aim=AIM, user_yim=YIM, user_msnm=MSN, user_interests=personalText
           WHERE user_id=userid;";
   $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

// uses phpbb's bbcode encoder to make a uid for each message
// which is required for the bbcode to work in phpbb
// clean up bbcode in signatures and ad bbcode_uid
    $query = "SELECT user_id, user_sig
           FROM {$phpbb_dbprefix}users
           ORDER BY user_id;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    while ( $row = mysql_fetch_object( $result ) ) {
      $bbcode_uid = ( $bbcode_on ) ? make_bbcode_uid() : '';
      $signature = prep ( $row->user_sig);
      $signature = preg_replace ('/\'/', '\\\'', $signature);
      $query = "UPDATE {$phpbb_dbprefix}users
              SET user_sig='$signature', user_sig_bbcode_uid='$bbcode_uid'
              WHERE user_id=$row->user_id";
      $updateresult = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    }
    mysql_free_result($result);

   $query = "SELECT COUNT(*) FROM {$phpbb_dbprefix}users;";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    list($count) = mysql_fetch_row($result);

//Clean up avatar, only for off site avatar, Onsite Avatars will be deleted
    echo "<br />Updated $count Users... OK\n"; flush();
    $query = "UPDATE {$phpbb_dbprefix}users
           SET user_avatar_type = 3
           WHERE user_avatar LIKE 'http://%';";
   $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   $query = "UPDATE {$phpbb_dbprefix}users
           SET user_avatar_type = 0, user_avatar = NULL
           WHERE user_avatar NOT LIKE 'http://%';";
   $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   // create a group for each user
   echo "<br />Updating Users Groups...\n"; flush();
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}groups";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    $query = "INSERT INTO {$phpbb_dbprefix}groups (group_id, group_type, group_name, group_description, group_moderator, group_single_user)
           SELECT user_id, '1', '', 'Personal User', '0', '1'
           FROM {$phpbb_dbprefix}users ORDER BY user_id";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

// have each user join their own group
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}user_group";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    $query = "INSERT INTO {$phpbb_dbprefix}user_group (group_id, user_id, user_pending)
           SELECT user_id, user_id, '0'
           FROM {$phpbb_dbprefix}users
           ORDER BY user_id";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    echo "OK\n"; flush();

//insert ranks
   echo "<br />Inserting User Ranks...\n"; flush();
    $query = "TRUNCATE TABLE {$phpbb_dbprefix}ranks";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());
    $query = "INSERT INTO {$phpbb_dbprefix}ranks (rank_id, rank_title, rank_min, rank_special, rank_image) SELECT rank_id, rank_title, rank_min, rank_special, rank_image
           FROM {$mosConfig_dbprefix}fb_ranks
           ORDER BY rank_id";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

    echo "OK\n"; flush();
    echo "<br />Complete...\n"; flush();

   echo "</body>";
   echo "</html>"; flush();

    //--- Function to prepare strings for MySQL storage ---/
    function prep($s) {
    // Insert bbcode_uid necessary for bbcode to be recognized by phpbb2
        global $bbcode_uid;

        // <strong> </strong>
        $s = preg_replace('/\[b\]/', '[b:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/b\]/', '[/b:'.$bbcode_uid.']', $s);

        // <em> </em>
        $s = preg_replace('/\[i\]/', '[i:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/i\]/', '[/i:'.$bbcode_uid.']', $s);

        // <u> </u>
        $s = preg_replace('/\[u\]/', '[u:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/u\]/', '[/u:'.$bbcode_uid.']', $s);

        // quote
        $s = preg_replace('/\[quote\]/', '[quote:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/quote\]/', '[/quote:'.$bbcode_uid.']', $s);

        // url with "
        $s = preg_replace('/\[url=\\\&quot\;(.*?)\\\&quot\;\](.*?)/', '[url=\\1]\\2', $s);

        // image
        $s = preg_replace('/\[img(.*?)\](.*?)\[\/img(.*?)\]/si', '[img:'.$bbcode_uid.']'.'\\2[/img:'.$bbcode_uid.']', $s);

        // color
        $s = preg_replace('/\[color=(.*?)\]/', '[color=\\1:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/color\]/', '[/color:'.$bbcode_uid.']', $s);

        // size fb uses size 1 to 5,  phpbb2 uses size 1 to 29; will use 1 = 7, 2=9, 3=12, 4=18, 5=24
        $s = preg_replace('/\[size=1\]/', '[size=7:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[size=2\]/', '[size=9:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[size=3\]/', '[size=12:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[size=4\]/', '[size=18:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[size=5\]/', '[size=24:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/size\]/', '[/size:'.$bbcode_uid.']', $s);

        // code
        $s = preg_replace('/\[code(.*?)\]/','[code:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/code(.*?)\]/', '[/code:'.$bbcode_uid.']', $s);

        // lists
        $s = preg_replace('/\[ul\]/', '[list:'.$bbcode_uid.']', $s);
      $s = preg_replace('/\[\/ul\]/', '[/list:u:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[ol\]/', '[list=1:'.$bbcode_uid.']', $s);
      $s = preg_replace('/\[\/ol\]/', '[/list:o:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[li\]/', '[*:'.$bbcode_uid.']', $s);
        $s = preg_replace('/\[\/li\]/', '', $s);

        return $s;
    }

// fixed the quotes.
   function fixquotes($q) {
        global $bbcode_uid;
      $q = preg_replace('/\[b:'.$bbcode_uid.'\](.*?) wrote:\[\/b:'.$bbcode_uid.'\]\r\n\[quote:'.$bbcode_uid.'\]/', '[quote:'.$bbcode_uid.'="\\1"]', $q );
      return $q;
    }

// function taken from phpbb2 functions file Unique ID for this message..
    function make_bbcode_uid()
    {
            $uid = md5(mt_rand());
            $uid = substr($uid, 0, BBCODE_UID_LEN);
            return $uid;
    }

//last minute accounts to be added note phpbb2admin password is "admn" Besure to remove once you have tested the  site.
   $query = "INSERT INTO {$phpbb_dbprefix}users (user_id, user_active, username, user_password, user_session_time, user_session_page, user_lastvisit, user_regdate, user_level, user_posts, user_timezone, user_style, user_lang, user_dateformat, user_new_privmsg, user_unread_privmsg, user_last_privmsg, user_login_tries, user_last_login_try, user_emailtime, user_viewemail, user_attachsig, user_allowhtml, user_allowbbcode, user_allowsmile, user_allowavatar, user_allow_pm, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_rank, user_avatar, user_avatar_type, user_email, user_icq, user_website, user_from, user_sig, user_sig_bbcode_uid, user_aim, user_yim, user_msnm, user_occ, user_interests, user_actkey, user_newpasswd) VALUES
         (-1, 0, 'Anonymous', '', 0, 0, 0, 0, 0, 0, 0.00, NULL, '', '', 0, 0, 0, 0, 0, NULL, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, NULL, '', 0, '', '', '', '', '', NULL, '', '', '', '', '', '', ''),
         (2, 1, 'phpbb2admin', '21232f297a57a5a743894a0e4a801fc3', 1198282415, 0, 1198282415, 0, 1, 1, 0.00, 1, 'english', 'd M Y h:i a', 0, 0, 0, 0, 0, NULL, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, '', 0, 'admin@yourdomain.com', '', '', '', '', NULL, '', '', '', '', '', '', '');";
    $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

   $query = "INSERT INTO {$phpbb_dbprefix}user_group (group_id, user_id, user_pending) VALUES
         (1, -1, 0),
         (2, 2, 0);";
   $result = mysql_query($query) or die("<br />Invalid query:<br />$query<br />" . mysql_error());

?>

Вернуться в «Для авторов (phpBB 2.0.x)»