PDA

Zobacz pełną wersję : Błędnie wyświetlanie polskich znaków



Warg
15-04-2016, 11:46
Próbowałem zmienić kodowanie bazy danych na utf-8 z iso-8859-2 i wyświetlają mi się na stronie (i zapleczu) '?' zamiast polskich znaków. Konwersji dokonałem polskim programem Gżegżółka.
Zmieniłem kodowanie w pliku szablonu również na utf-8 (było iso-8859-1)

Ma ktoś jakąś poradę?

Warg
15-04-2016, 14:14
Dodam, że przeniosłem witrynę z serwera na Xampa.
Zostawiłem kodowanie iso-8859-2 i również nie ma polskich znaków.
Zauważyłem że plik SQL (pobrany z serwera) jest w formacie Windows-1250. Próbowałem wgrywać go bez zmian, ale metoda porównywania napisów ustawia się na utf-general-ci.

Edit: Po zaimportowaniu bazy wszystkie polskie znaki w PhpMyAdmin są, ale wyświetlanie ich na stronie i zapleczu jest błędne.

zwiastun
15-04-2016, 16:00
1. Wyeksportuj plik sql z serwera
2. Odczytaj plik w edytorze Notepad++ tak, by widzieć polskie znaki (powinien rozpoznać format automatycznie, jeśli nie rozpozna, spróbuj ustalić właściwy format za pomocą opcji w zakładce Format
3. Skorzystaj z funkcji w zakładce Format edytora: Konwertuj do UTF-8 bez BOM.
4. Odszukaj i zamień w pliku literały definiujące kodowanie (w deklaracjach tabel) - literały zaczynające się od COLLATE i od CHARSET
5. Zapisz zmodyfikowany plik i zaimportuj go do nowej bazy

Warg
18-04-2016, 09:15
Nie mam COLLATE, ale CHARSET jest ustawiony na Latin2. Na co mam zamienić?

Warg
18-04-2016, 09:59
Sprawdziłem dokładnie - przed konwersją mam zamiast ó mam ó a reszta jest bez zmian (ł to ł, ń to ń, itd.). Po konwersji jest to samo.
W PhpMyAdmin wyświetlają się poprawnie wszystkie znaki, a nie ó. Natomiast na stronie jest na odwrót.

Warg
18-04-2016, 10:49
Jest tego więcej:   – „ ” " ¼
Zmieniłem ó na ó i dobrze się wyświetla i na stronie i w PhpMyAdmin.

EDIT: Zamieniłem znaki polskie (te które się nie wyświetlają) na odpowiednie encje HTML, np. ł = ł. I teraz działa :)

Warg
18-04-2016, 12:09
@Zwiastun Możesz usunąć temat, bo jednak nie wszystko jest dobrze :( Założę nowy, jak dokładniej sprawdzę błędy. Sory za zamieszanie.

zwiastun
18-04-2016, 23:47
Baza musi być kodowana w utf8 (utf8_general_ci, a jeszcze lepiej utf8_polish_ci (różnica między polish a general ma znaczenie dla sortowania danych - z polish sortuje zgodnie z zasadami języka polskiego).

Powinieneś więc stworzyć bazę danych z takim kodowaniem i do takiej bazy zaimportować dane przygotowane w sposób, jaki Ci opisałem wcześniej.
Gdy importujesz nawet poprawnie kodowany plik (chodzi o kodowanie jezyka) do bazy zdefiniowanej w latin2, to silnik bazy danych dokonuje przekodowania znaków na nazwane encje, które widzi program do obsługi bazy danych, ale juz niekoniecznie program obsługujący witryne (w tym przypadku Joomla). Ponadto w szablonie nie powinieneś miec wpisanego kodowania na sztywno, ale za pomocą instrukcji php odczytującej język witryny z konfiguracji.

Warg
22-04-2016, 09:18
Ponadto w szablonie nie powinieneś miec wpisanego kodowania na sztywno, ale za pomocą instrukcji php odczytującej język witryny z konfiguracji.

<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
Tak mam w templatce.

A czy mam dać CHARSET = utf8_polish_ci? Bo to nie działa. Działa zwykłe utf8. A w phphMyadmin mam ustawić Metodę porównywania napisów na utf8_polish_ci?

Warg
22-04-2016, 10:22
To co zrobiłem:

Otworzyłem baze w notatniku.
Sprawdziłem, że jest kodowanie ANSI
Format > Konwertuj na format UTF-8 (bez BOM)
Zmieniłem CHARSET na utf8
Zaimportowałem jako utf8


Wciąż problem ze znakami.


Metoda porównywania napisów: utf8_general_ci

Warg
22-04-2016, 11:59
Poszperałem i znalazłem odpowiedź (http://forum.joomla.org/viewtopic.php?t=174443). Zmieniłem na sztywno wyświetlanie:
1. \includes\database.php odkomentowałem
@mysql_query("SET NAMES 'utf8'", $this->_resource);
2. W pliku globals.php dodałem
header("Content-Type: text/html; charset=UTF-8"); między "}" a "?>" na końcu pliku.
3. \language\polish.ini zmieniłem:
DEFINE('_ISO','charset=iso-8859-1');
//na
DEFINE('_ISO','charset=utf-8'); (było ISO)