g6uru Опубликовано 24 Июля 2008 Жалоба Поделиться Опубликовано 24 Июля 2008 IPB2ГЕА-8: HowTo 1. распаковываем из папки upload дистрибутива IPB в папку на сервере где будет лежать форум2.переименовываем conf_global.php.dist в conf_global.php и выставляем права 777 для install/installfilescachecache/lang_cachecache/skin_cacheuploadsstyle_imagesconf_global.php #!/bin/bash -x # write by kudrin.alexandr@gmail.com by | sportbox.ru # --- CONFIG SECTION --- SDIR="/var/www/test.site.ru/data/forum" # forum full dir without slash '/' in the end MYSQLHOST="localhost" # MySQL Host MYSQLUSER="root" # MYSQL user MYSQLPASSWORD="12345" # Password of MySQL USER MYSQLDB="lasttest" # Forum Database # --- END CONFIG SECTION --- # --- OPTIONAL CONFIG --- SCP="windows-1251" # codepage for 'iconv' EXT=".*\.(htm[l]*|php[3]*|js|css|sql)$" #files extensions for coding FCS="windows-1251" # charset for replace # Destination Dir's params DDIR=$SDIR"_utf/" # with slash '/' in the end MDIR=$SDIR"_utf_mb/" # with slash '/' in the end DCP="UTF-8" # codepage for 'iconv' TCS="UTF-8" # new charset mkdir $DDIR mkdir $MDIR CDIR=$SDIR"_cp1251/" mkdir $CDIR SDIR=$SDIR"/" echo > $SDIR # --- END OPTIONAL CONFIG --- # --- Files 2 utf8 # Make new copy cp -aR $SDIR* $DDIR cp -aR $SDIR* $MDIR # Flush miscoded files find $DDIR -type f | grep -E "$EXT" | xargs -i rm -f {} # Convert From To find $SDIR -type f | grep -E "$EXT" | sed "s#$SDIR##" | xargs -i echo {} | \ while read f do iconv -c -f $SCP -t $DCP -o "$DDIR$f" "$SDIR$f" cat "$DDIR$f" | replace "unserialize" "mb_unserialize" > "$MDIR$f" # Revert MODE & OWNER chmod `find "$SDIR$f" -maxdepth 0 -printf "%m"` "$DDIR$f" chown `find "$SDIR$f" -maxdepth 0 -printf "%u:%g"` "$DDIR$f" # Replace strings perl -pi -e "s#content\s*\=\s*[\"'].*?charset\s*=\s*$FCS.*?[\"']#content=\"text/html; charset=$TCS\"#g" "$DDIR$f" done mv $SDIR* $CDIR mv $MDIR* $SDIR rm -dfr $MDIR #MySQL 2 utf8 # Dump our DB mysqldump --user=$MYSQLUSER --password=$MYSQLPASSWORD $MYSQLDB --allow-keywords --create-options --complete-insert --default-character-set=cp1251 --add-drop-table > dump_$MYSQLDB.sql # Convert dump file iconv -f cp1251 -t UTF-8 dump_$MYSQLDB.sql > dump_$MYSQLDB"_utf8.sql" # Replace all cp1251 cat dump_bdname_utf8.sql | replace "cp1251" "utf8" > dump_$MYSQLDB"_utf8_replace.sql" # Drop our DB yes | mysqladmin --user=$MYSQLUSER --password=$MYSQLPASSWORD drop $MYSQLDB # Create DB and _bak mysqladmin --user=$MYSQLUSER --password=$MYSQLPASSWORD create $MYSQLDB"_bak" mysqladmin --user=$MYSQLUSER --password=$MYSQLPASSWORD create $MYSQLDB # SEt default codepage mysql --user=$MYSQLUSER --password=$MYSQLPASSWORD --execute="USE $MYSQLDB"_bak"; ALTER DATABASE $MYSQLDB"_bak" DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci" mysql --user=$MYSQLUSER --password=$MYSQLPASSWORD --execute="USE $MYSQLDB; ALTER DATABASE $MYSQLDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" mysql --user $MYSQLUSER --password=$MYSQLPASSWORD $MYSQLDB --default-character-set=utf8 < dump_$MYSQLDB"_utf8_replace.sql" mysql --user $MYSQLUSER --password=$MYSQLPASSWORD $MYSQLDB"_bak" --default-character-set=cp1251 < dump_$MYSQLDB.sql Что он делает?архивирует ваш форум в папку SDIR_сp1251переводит все файлы в кодировку UTF-8 и сохраняет все это добро в папке SDIR_utfв первоначальной папке SDIR оказывается форум в utf 8 во всех файлах функция unserialize заменена на mb_unserializeберет вашу БД делает дамп в файл dump_MYSQLBD.sqlберет вашу перегоняет дамп в кодировку UTF файл dump_MYSQLBD_utf.sqlзаменяет все DEFAULT CHARSET с cp1251 на utf-8 и сохрает результат в файл dump_MYSQLBD_utf_replace.sqlдамп с dump_MYSQLBD_utf_replace.sql импортирует в MYSQLBDдамп с dump_MYSQLBD.sql импортирует в MYSQLBD_bak 5.открываем /forum/sources/ipsclass.php и в самое начало добавляем функцию/взята с http://ru2.php.net/unserialize написанна skinnepa at hotmail dot com/ function mb_unserialize($serial_str) { $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str ); return unserialize($out); } 6.в config_global.php выставить $INFO['mysql_codepage'] = 'utf8';7.теперь переключаем ваш кодировку для отображения в вашем браузере UTF-8 и заходим в админку НАСТРОЙКИ -> общие настройки -> Кодировка документов -> UTF-8. Сохраняем собственно все. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
g6uru Опубликовано 28 Августа 2008 Автор Жалоба Поделиться Опубликовано 28 Августа 2008 Таки этого оказалось не достаточно, опять таки потомучто УТФ будет полдноценно поддерживаться ПЫХой только с 6ой версии, а пока приходится извращатся. Не корректно работает preg_match, опять заменяем все одноименные функцииfind /var/www/sitename/data/forum -name "*.php" | xargs perl -pi -e 's/preg_replace\(/mb_preg_replace\(/g' после чего в файле ipclass добавляем перед функцией mb_unserialize, следующий код:function mb_preg_replace ($pattern , $replacement , $subject) { return preg_replace($pattern."u",$replacement, $subject); } при этом в функции mb_unserialize, используем просто preg_replace(), без mb. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
@lexander Опубликовано 26 Октября 2008 Жалоба Поделиться Опубликовано 26 Октября 2008 Спасибо за подробную инструкцию, но как ваш скрипт запустить под Виндовс? (на локальной машине) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
g6uru Опубликовано 26 Октября 2008 Автор Жалоба Поделиться Опубликовано 26 Октября 2008 Спасибо за подробную инструкцию, но как ваш скрипт запустить под Виндовс? (на локальной машине) Как вариант поставить VM ware. ))) Смысл данного скрипта прост, берем все файлы php, html, xml и перекодируем из ср-1251 в утф 8. Чем это лучше сделать под виндой подсказать не могу. Потом находим все файлы в которых используется, фунции preg_exp и unserilze и заменяем их на mb_preg_exp и unserilize. Деламем дамп БД, можно через пхп май админ, и мучаем этот дамп пока он не будет нормально показываться в утф-8. Потом заменяем в нем все вхождения ср1251 на утф8. И разворачиваем. ЗЫ возможно при разорачивании дампа нужно указать параметр --default-charset=utf8 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
dpwiz Опубликовано 17 Ноября 2008 Жалоба Поделиться Опубликовано 17 Ноября 2008 Таки этого оказалось не достаточно, опять таки потомучто УТФ будет полдноценно поддерживаться ПЫХой только с 6ой версии, а пока приходится извращатся. Не корректно работает preg_match, опять заменяем все одноименные функцииfind /var/www/sitename/data/forum -name "*.php" | xargs perl -pi -e 's/preg_replace\(/mb_preg_replace\(/g' после чего в файле ipclass добавляем перед функцией mb_unserialize, следующий код:function mb_preg_replace ($pattern , $replacement , $subject) { return preg_replace($pattern."u",$replacement, $subject); } при этом в функции mb_unserialize, используем просто preg_replace(), без mb.После этого "патча" при добавлении в друзья пишет: Warning: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 17 in /opt/www/ipb/forum/sources/ipsclass.php on line 76Warning: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 17 in /opt/www/ipb/forum/sources/ipsclass.php on line 76 но при этом в друзья всё равно добавляет. а полнотекстовый поиск так и не заработал. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
FatCat Опубликовано 17 Ноября 2008 Жалоба Поделиться Опубликовано 17 Ноября 2008 Не помню где брал, неплохой набор пхп-функций для перекодировки на лету.Функции можно добавить например в сипекс-дампер...unicode.lib.zip Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Iven Опубликовано 26 Апреля 2009 Жалоба Поделиться Опубликовано 26 Апреля 2009 подскажите плз как правильно выполнить 4 пункткак и куда поместить данный скрипт и как его вызвать ? версия ipb 2.3.6база уже в utf 8если добавить кеш русскоо языка в win 1252 а в админке поставить utf-8 - все отображается корректно, но в бд крякозябрикинеобходимо чтобы в бд был читаемый текст в utf-8 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
php6nik Опубликовано 27 Мая 2009 Жалоба Поделиться Опубликовано 27 Мая 2009 блин, я чето пытался, так и не понял... выложите плиз уже готовую версию в utf-8. просто не хочу vbulletin пользоваться. нравица IPB Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 27 Мая 2009 Жалоба Поделиться Опубликовано 27 Мая 2009 блин, я чето пытался, так и не понял... выложите плиз уже готовую версию в utf-8. просто не хочу vbulletin пользоваться. нравица IPBВы не соответствуете своему нику. Или наоборот, слишком сильно?Надейтесь Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
p4elov Опубликовано 19 Мая 2010 Жалоба Поделиться Опубликовано 19 Мая 2010 ни у кого не возникло проблем после конвертации с javascript?У меня стоял тег spoiler и после конвертации при нажатии на тег, редиректит следующим образом:"The requested URL /forum/\"java script:void(0);\" was not found on this server." Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Гесер Опубликовано 24 Июня 2010 Жалоба Поделиться Опубликовано 24 Июня 2010 Все так сложно? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
pvo1988 Опубликовано 1 Июля 2010 Жалоба Поделиться Опубликовано 1 Июля 2010 (изменено) Гесер! Вам не нужно перекодировать свой форум в UTF-8, он уже хранится в этом виде. У Вас ведь тот же хостинг, что у меня был? Так вот, Вам нужно всего лишь, как написано в инструкции по обновлению:2. Вы сконвертировали базу, которая уже была в UTF.Начните обновление с шага 2, но не выполняйте перекодирование базы (самого текста), а только выполните замены команд SQL. т.е.Итак весь текст у нас переведен в UTF-8, теперь необходимо изменить команды SQL. Делается это так Собственно так как дамп у нас должен быть в правильной cp1251 кодировке, то делаем замену в файле этих значений на новые: > sed 's/SET NAMES cp1251/SET NAMES utf8/g' < dump.utf8 > 1.dump.utf8> sed 's/DEFAULT CHARSET=cp1251/DEFAULT CHARSET=utf8/g' < 1.dump.utf8 > dump.utf8.sql Данную команду наглядно описать с русскими значениями: sed 's/БЫЛО/СТАЛО/g' < ОТКУДА ЧИТАЕМ > КУДА ЗАПИСЫВАЕМ Я верно понял, что Вы собираетесь перейти на тройку? Изменено 1 Июля 2010 пользователем pvo1988 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.