Skocz do zawartości
Pecetowicz Forum komputerowe

Naprawa "krzaków" w bazie danych. phpBB2 by Przemo.


Rekomendowane odpowiedzi

Witam. W temacie opiszę sposób naprawiania kodowania w bazie danych czyli tak zwanych "krzaków". Należy go uważnie przeczytać i nie pomijać żadnych kroków. Jeśli czegoś nie rozumiesz lub masz uwagi to pisz w tym temacie.

Co to są krzaki?

Krzaki to różna znaki specjalne które się wyświetlają zamiast znaków których oczekujemy (zamiast prawidłowych). Konkretne krzaki mają dokładne odpowiedniki polskich znaków.

Krzaki jako odpowiedniki polskich znaków

  • ¼ to ź
  • ± to ą
  • ¶ to ś
  • ¦ to Ś
  • ê to ę
  • ³ to ł
  • £ to Ł
  • æ to ć
  • ¿ to ż
  • ñ to ń
  • Ñ to Ń
  • ¯ to Ż
  • ¡ to Ą

Jeżeli temat będzie dla ciebie zbyt skomplikowany, sprawdź również inny temat omawiający ten sam problem: Naprawa polskich znaków w bazie danych. "Krzaki". Poradnik.

Spis Treści

  • Parę INFO - trochę informacji
  • Co będzie potrzebne ?
  • Jak zrobić poprawny backup w phpmyadminie ?
  • Naprawianie kodowania bazy / zmiana kodowania na latin2 (opis jak przerobić bazę na prawidłowe kodowanie latin2)
  • Przystosowanie skryptu forum oraz bazy dla kodowania latin2 (co trzeba zrobić aby forum obsłużyło tak przerobioną bazę)
  • Wgrywanie pliku bazy zapisanego w kodowaniu latin2 (jak wgrać tak przerobioną bazę)
  • Krótkie info na temat przenoszenia tak przerobionej bazy na inny serwer (czyli jeśli zmieniamy hosting)

Parę INFO

  • Jeśli w pliku z kopią bazy danych, bądź w samej bazie danych (na serwerze) zamiast polskich znaków są znaki zapytania ???? to takiej bazy nie da się już uratować !!! (nie chodzi o wyświetlanie się znaków zapytania na forum) W ostateczności można spróbować użyć słownik np. w ms word lub http://www.gzegzolka.com/poliszynel/
  • latin2 to to samo kodowanie co ISO 8859-2 tylko pod inną nazwą
  • phpBB2 (w tym phpBB by przemo) nie obsługuje kodowania utf-8 dla bazy danych mysql
  • Ten poradnik przedstawia sposób przerobienia dowolnej bazy danych z dowolnym kodowaniem na kodowanie latin2
  • Kodowanie latin1 nie obsługuje polskich znaków (po prostu w tym kodowaniu nie istnieją)
  • łopatologicznie: sporo baz ma standardową konfigurację z porównywaniem latin1_swedish_ci i kodowanie dla bazy utf8, dzięki temu krzaczki jakie zastępują polskie znaki poprawnie się wyświetlają na forum (konkretnie:
  • Kody pierwszych 256 znaków Unicode pokrywają się z kodami ISO Latin 1 (czyli ISO-8859-1). )
  • Może się zdarzyć iż w bazie masz więcej niż jedno kodowanie wtedy musisz każde z krzaczków które występują w tych kodowaniach podmienić żadnego nie pomijając
  • Dla ułatwienia w załączniku daję krzaki odpowiadające polskim znakom w wielu przypadkach dlatego warto porównać czy ty nie masz przypadkiem takich krzaków (dla kodowania latin1)
  • Może też się zdarzyć iż dla jednego polskiego znaku odpowiadają dwie litery a druga może być poprawnym polskim znakiem dlatego wtedy zamieniamy obydwie ( razem z tą poprawną, z reguły jest to takie dziwne A, czyli zmieniamy razem z tym A )
  • Na koniec pamiętaj o wyczyszczeniu cache

Co będzie potrzebne ?

  • Edytor obsługujący trzy kodowania: ISO 8859-2, utf-8,ANSI
  • polecam Edit Plus 3 ( cały tutorial będzie oparty na tym edytorze )
  • Dobry backup bazy, czyli np. w phpmyadminie wykonany w opisany niżej sposób
  • Chwila wolnego czasu i trochę cierpliwości

Jak zrobić poprawny backup w phpmyadminie ?

Należy w zakładce Eksport zaznaczyć oraz wybrać:

  • Obejmij eksport transakcją
  • Tryb zgodności SQL z listy wybrać MYSQL40 WAŻNE !
  • Dodaj DROP TABLE / VIEW / PROCEDURE / FUNCTION
  • Dodaj IF NOT EXISTS
  • Dodaj wartości AUTO_INCREMENT
  • Użyj cudzysłowów z nazwami tabel i pól
  • Dodaj CREATE PROCEDURE / FUNCTION

Naprawianie kodowania bazy / zmiana kodowania na latin2

Zaczniemy od przystosowania edytora Edit Plus 3. Odpalamy program i wchodzimy w zakładkę File >> Open ( skrót klawiaturowy CTRL + O ) i szukamy na dole przycisku z ... ( trzema kropkami ) i klikamy na niego, wyskoczy nam lista kodowań na której szukamy Central European (iso-8859-2), zaznaczamy je i klikamy strzałeczkę aby przeciągnąć je na lewą stronę i potwierdzamy przyciskiem OK

Teraz możemy otworzyć plik z kopią bazy ( oczywiście po uprzednim wypakowaniu z archiwum jeśli została wybrana kompresja przy eksporcie ) znowu klikamy File >> Open lecz teraz zanim potwierdzimy chęć otwarcia pliku z listy Encoding: będziemy wybierać kodowanie najpierw utf-8 i klikamy Otwórz

Po czym sprawdzamy czy w otwartej bazie są wszystkie Polskie znaki wiec szukamy za pomocą wyszukiwarki która można otworzyć z zakładki Search >> Find lub skrótem CTRL + F, następnie zaznaczamy opcje Case sensitive oraz Regular expression i wyszukujemy polskie znaki z ogonkami np. Ź, Ż, Ł, ź, ł, ą, itd.

Jeśli znajdują się wszystkie oznacza to że możesz plik zapisać z kodowaniem latin2 czyli przejdź do zakładki File >> Save As.. i z listy kodowań wybierz Encoding: Central European ( iso-8859-2 ) i zapisz pod inna nazwą niż oryginalna kopia bazy.

Możesz przejść już do kroku wgrywania bazy i przystosowania forum.

Jeśli nie znalazłeś polskich znaków to otwórz plik zgodnie z instrukcja wcześniej lecz przy otwieraniu wybierz kodowanie Encoding: Central European ( iso-8859-2 )

I możesz wykonać kroki podane wcześniej (z szukaniem polskich znaków a następnie zapis), jeśli nadal nie będzie polskich znaków patrz niżej.

Jeżeli nadal nie masz polskich znaków oznacza to że musisz teraz trochę edytować kopię bazy

Najpierw otwieramy plik z kodowaniem Encoding: ANSI

Zaczynamy od wyszukania tabeli phpbb_posts_text i niżej szukamy wyrazy z polskimi znakami które będą bardzo dziwnie zapisane np. ¼ -> ź itd.

Więc odczytujemy pojedynczo każdy polski znak i korzystamy z funkcji Replace With ( Zamień na )

Która znajduje się w zakładce Search >> Replace, Zaznacz opcje Case sensitive, Wrap at the end of file oraz Regular expression i w polu Find what: skopiuj krzak jaki odpowiada polskiemu znakowi np. ¿ a w polu Replace with wpisz jakiemu znakowi polskiemu odpowiada wcześniejszy krzak czyli np. ż i kliknij Replace All i postępuj tak z każdym polskim znakiem.

Następnie według kroków wyżej zapisz plik z kodowaniem Central European ( iso-8859-2)

Przystosowanie skryptu forum oraz bazy dla kodowania latin2

Zaczniemy od przystosowania bazy danych.
Należy wejść do okienka zapytań SQL i wykonać zapytanie:

ALTER DATABASE `nazwa_bazy` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;

Gdzie za nazwa_bazy wstawiamy nazwę bazy która wyświetla się po lewej stronie ( baza z forum )

Następnie należy edytować plik db/mysql4.php
wstaw pod:

$dbselect = mysql_select_db($this->dbname);

to:

mysql_query('SET NAMES latin2 COLLATE latin2_general_ci', $this->db_connect_id);

Stwórz plik: kodowanie_latin2.php (gotowy plik w załączniku) i wklej do niego:

<?php
$mod_name[] = 'Kodowanie latin2 - mysql4.php';
$add_size['db/mysql4.'.$phpEx] += 75;
?>

Wgraj go następnie do katalogu: includes/mods_info/

Wgrywanie pliku bazy zapisanego w kodowaniu latin2

Po naprawieniu kodowaniu pliku bazy i przystosowania bazy oraz forum można wgrać kopię bazy, pamiętając o wybraniu kodowania latin2 !!!

W phpmyadminie w zakładce import z listy Zestaw znaków dla pliku: wybieramy latin2 a z listy Tryb zgodności SQL wybieramy MYSQL40 i klikamy wykonaj i baza się wgra z poprawnymi polskimi znakami

Jeśli po wykonaniu wszystkich kroków poprawnie na forum widzisz znaki zapytania lub brak polskich znaków wyczyść cache forum ( robi się to przez Panel Administracyjny >> Indeks Administracji i na dole jest przycisk Wyczyść cache lub przez klienta FTP czyścimy katalog /cache/ zostawiając jedynie plik htaccess )

Krótkie info na temat przenoszenia tak przerobionej bazy na inny serwer

Aby przenieś tak przerobioną bazę zalecam skorzystać z phpmyadmina podanego wyżej, a następnie na nowej bazie należy wykonać zapytanie

ALTER DATABASE `nazwa_bazy` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;

Gdzie za nazwa_bazy wstawiamy nazwę bazy która wyświetla się po lewej stronie ( baza z forum )

A następnie w phpmyadminie przystosowanym do latin2 wgrać zrobiony wcześniej backup z kodowaniem latin2

Jeśli korzystasz ze zwykłego phpmyadmina to zrobiony w nim backup musisz od nowa przerobić na latin2
(zapewne poprzez otwarcie z kodowaniem utf8 a następnie zapisanie w kodowaniu latin2). Kolejnym krokiem jest wgranie tak przerobionego backupu (import) z wybranym kodowaniem latin2 z listy.

Należy także pamiętać o przerobionym pliku mysql4.php i zapytaniu do bazy mysql 

Pliki do pobrania

Ukryta zawartość

    Zareaguj na post lub odpowiedz w temacie aby zobaczyć ukrytą zawartość.

  • Lubię to! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Założyciel

Tutaj też jest podobny poradnik: Naprawianie bazy danych - krzaków na forum

Cała naprawa polega na tym aby w kopii naszej bazy danych były widoczne polskie znaki i aby tą kopię zapisać w kodowaniu UTF-8 oraz DELIKATNIE JĄ PRZEROBIĆ. Następnie należy przystosować forum, i potem wgrać taką kopię bazy.

phpBB by Przemo pracuje w kodowaniu ISO-8859-2, to kodowanie ma także inną nazwę: latin2. Jest to jedno i to samo! (nazwa latin2 jest wykorzystywana w bazach mysql)

Aby móc naprawić działanie polskich znaków potrzebujesz kopii bazy danych w której są zamiast polskich znaków krzaki (dowolne!) lub po prostu kopię w której są POLSKIE ZNAKI.

Krzaki to znaki które się wyświetlają zamiast znaków których oczekujemy (zamiast prawidłowych).

Aby polskie znaki działały muszą być spełnione 3 warunki:

  • Baza danych mysql musi być wgrana w odpowiednim kodowaniu (tabele, pola muszą mieć także ustawione odpowiednie kodowanie)
  • Skrypt php musi odebrać dane w odpowiednim kodowaniu i je odpowiednio wysyłać
  • Kodowanie zdefiniowane na stronie musi się zgadzać z kodowaniem bazy danych

O spełnienie pierwszych dwóch warunków musimy zadbać sami, bo nikt wcześniej nie pomyślał żeby o to zadbać.

Jeśli w samej bazie danych (w widoku w phpmyadminie) lub kopi bazy danych zamiast polskich znaków są ? (znaki zapytania) to niestety ale tego już nie da się naprawić, pozostaje ręczna naprawa z pomocą jakiegoś słownika.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...