wtorek, 25 grudnia 2012

Po aktualizacji phpBB2 do phpBB3 krzaki na forum

W tym poście zajmiemy się usuwaniem brzydkich krzaczków, które mogą pojawić się po konwersji forum phpBB.
Skrypt forum phpBB jest jednym z najpopularniejszych na świecie. Doczekaj się wielu modów i pluginów. Na pewno każdemu webmasterowi prędzej czy później przyjdzie się zmierzyć z tym skryptem.

Od czasu do czasu wykonuję różne prace na zlecenie zaprzyjaźnionych serwisów. Tak też było i tym razem. Wraz z reaktywacją forum redakcja poprosiła mnie o sprawdzenie zabezpieczeń, wgranie awatarów i aktualizację skryptu. Zainstalowane było forum phpbb w wersji 2.0.22, natomiast najnowsza wersja skryptu nosiła oznaczenie 3.0.11. Uaktualniłem skrypt wedle tej instrukcji, robiąc wcześniej kopię bazy danych. Po zakończonej konwersji moim oczom ukazał się nieprzyjemny widok, gdyż widziałem krzaki ;)

Po dokładniejszym przyjrzeniu się stwierdziłem, że nie będzie tak łatwo. Chodziło o zamianę znaku Â, jednak w pewnych przypadkach należało po prostu usunąć ten znak, a w innych przypadkach zamienić go na właściwy, niezniekształcony symbol. Wiedziałem jak to zrobić, gdyż MySQL posiada funkcję REPLACE, która pozwala zamienić wyszukiwany tekst na inny. Musiałem tylko rozpisać wszystkie przypadki, co i jak zamienić. Poniżej wycinek w tej listy.

Wsp³³praca         ↦ zamienić ³ na ó
ArtykuÂł                 ↦ zamienić Âł na ł
dziaÂła                   ↦ zamienić Âł na ł jak wyżej
ÂżoÂłnierzy            ↦ zamienić Âż na ż, Âł na ł
II wojny Âśw.           ↦ zamienić Âś na ś
zdjÂŞcia                 ↦ zamienić ÂŞ na ę
Wilczym SzaÂącu   ↦ zamienić Âą na ń

Jak widać na powyższych przykładach, gdybyśmy tylko zamienili znak  na pusty, to tylko byśmy pogorszyli sprawę. Dlatego należało wykonać kaskadowo kilka zapytań SQL. Najlepiej je wykonać mając dostęp do phpMyAdmina i przełączając się na właściwą bazę.

UPDATE `phpbb3_topics` SET `topic_title`=REPLACE(`topic_title`,'Âł','ł');
UPDATE `phpbb3_posts` SET `post_text`=REPLACE(`post_text`,'Âł','ł');
UPDATE `phpbb3_topics` SET `topic_forums`=REPLACE(`topic_title`,'Âł','ł');

Należy wykonać trzy zapytania SQL dla jednej poprawianej litery, w przykładzie wyżej ł. Jest to konieczne, gdyż w bazie danych phpbb3 tematy postów są przechowywane w osobnej tabeli, podobnie jak treść postów i nazwy działów. Mam nadzieję, że temat komuś się przyda. Pozdrawiam



0 komentarzy:

Prześlij komentarz