Brak polskich znaków po konwersjii phpbb2 -> phpbb3

Pomoc przy konwersji phpBB 2.0.x lub innych skryptów do phpBB 3.0.x. Dyskusje na temat istniejących konwerterów oraz ich tworzenia.
Michalus
Posty: 2
Rejestracja: 18 grudnia 2012, 23:15

Brak polskich znaków po konwersjii phpbb2 -> phpbb3

Post autor: Michalus » 18 grudnia 2012, 23:23

Operacje opisane poniżej robię na localhoście, dla wygody (i jakby nie patrzeć szybciej w ten sposób). Docelowy serwer posiada (o ile dobrze pamiętam) php5.3.19 i MySQL 5.0.26. Problem braku polskich znaków diakrytycznych dotyczy całego forum (tekst postów, tytuły, opcje ankiet, tytułu ankiet, etc).

Mam do skonwertowania średniej wielkości forum (~70k postów/~4k tematów, ~1k użytkowników). Postawione jest to na phpbb by przemo v1.12.6.
Dostałem bazę od niego. Plik .sql kodowany w utf8, w notatniku niby krzaki, ale po wrzuceniu do phpMyAdmina jest już dobrze. Tabele i baza, po wrzuceniu, collation ma ustawione na utf8_general_ci - nie zmieniałem.

Nie chcąc usuwać modyfikacji przemo - część danych z nich będę jeszcze potrzebować - dodałem (zgodnie z zaleceniem tutorialu znalezionego na phpbb3.pl) kolumnę user_dateformat w tabeli users

Kod: Zaznacz cały

ALTER TABLE phpbb_users ADD user_dateformat VARCHAR(60) DEFAULT '|j M Y|, \\\o H:i' NOT NULL;
Konwersja niby przebiegła poprawnie, ale po zalogowaniu się widzę, że zamiast polskich znaków mam krzaki.

Pierwsza myśl - export/import bazy danych spaprały coś. Wygrzebałem gdzieś stare pliki od przemo 1.12.6. Edytując config.php i tabelę config, spiąłem wrzuconą bazę z plikami (brak załączników nieistotny). Znaki wyświetlają się prawidłowo, nowe/edytowane posty nie różnią się zestawem znaków od tych już istniejących, importowanych. Więc baza się nie uszkodziła.
Spróbowałem wywalić modyfikacje przema (funkcja 'odinstaluj' w PA), ustawiając docelową wersję na 2.0.19 (najwyższa oferowana opcja). Ponowna konwersja phpbb2->phpbb3, teoretycznie zakończona powodzeniem, także dała krzaki zamiast polskich znaków diakrytycznych...

Zaglądając do FAQ konwersji na phpbb.com, przeczytałem:
Broken non-latin characters The conversion script assumes that the database encoding in the source phpBB2 matches the encoding defined in the lang_main.php file of the default language pack of the source installation. Edit that file to match the database's encoding and re-start the conversion procedure.
Nie wiem czy dobrze rozumiem, że chodzi o "stare" phpbb, więc phpbb2 (zresztą tylko tam jest plik lang_main). Zaglądając do lang_main.php z lang_polish, znalazłem fragment kodu:

Kod: Zaznacz cały

setlocale(LC_ALL, 'pl');
@setlocale (LC_ALL, 'pl_PL.iso-8859-2', 'pl_PL.latin2', 'pl_PL', 'pl', 'polish');
$lang['ENCODING'] = 'iso-8859-2';
$lang['DIRECTION'] = 'ltr';
Nie wiem, czy chodzi im o ten kod, ale dla pewności wrzuciłem go też do lang_main.php z lang_english. Ponowna konwersja zakończyła się, raz jeszcze, krzakami zamiast polskich liter.

Czy ktoś spotkał się z podobnym problemem/znalazł jego rozwiązanie? Do tej pory jedyne co zadziałało to "ręczne" kopiowanie danych zapytaniami sql w phpMyAdminie - testowałem póki co tylko dla posts_text. Jednak jest to metoda toporna, wolałbym jej uniknąć.

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Brak polskich znaków po konwersjii phpbb2 -> phpbb3

Post autor: jaroslw » 23 grudnia 2012, 13:15

Dawno już nie robiłem konwersji, ale przytoczony przez Ciebie fragment tylko potwierdził moje przypuszczenie. Konwerter zakłada, że stara baza kodowana będzie w latin2.

To chyba ten fragment kodu, który należało zmienić. Skopiowałeś go tylko, czy też ustawiłeś inne kodowanie? Ten fragment powinien wyglądać chyba tak:

Kod: Zaznacz cały

setlocale(LC_ALL, 'pl');
@setlocale (LC_ALL, 'pl_PL.utf-8');
$lang['ENCODING'] = 'utf-8';
$lang['DIRECTION'] = 'ltr';
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Michalus
Posty: 2
Rejestracja: 18 grudnia 2012, 23:15

Re: Brak polskich znaków po konwersjii phpbb2 -> phpbb3

Post autor: Michalus » 23 grudnia 2012, 23:20

Hm. Na to bym raczej nie wpadł. Zostawiałem wcześniej go takim jak był - na iso-8859-2.
Sprawdziłem, istotnie działa :).

Idąc na szczyt łopatologii, a nie mając odpowiedzi przez blisko tydzień (tu, na phpbb3.pl i na phpbb.com :)), przejechałem bazę skryptem o algorytmie mniej-więcej:

Kod: Zaznacz cały

- ściągnięcie listy tabel i ich kolumn, dorobienie w każdej tabeli tymczasowej kolumny
- set names 'latin2'
|- ściąganie danych
|- [...] = mb_convert_encoding([...], 'ISO-8859-2', 'UTF-8')
|- wrzucenie danych
| W ten sposób aż przejechałem wszystkie wiersze we wszystkich tabelach ... :(
- wywalenie tymczasowych kolumn z tabel
Sposób też działa, ale jak już mówiłem, szczyt łopatologii z braku innych działających pomysłów :).
Dzięki za pomoc, dobrze wiedzieć że coś da się zrobić edycją 2 linijek :D

Zablokowany