Strona 1 z 1

apache, mysql - brak polskich znaków odczytywanych z db

: 17 listopada 2008, 15:34
autor: matyskiewicz
Witam,
Zainstalowałem Debiana, apache, mysql, phpmyadmin, a następnie zrobiłem prostą stronę testową.
Strona nie wyświetla polskich znaków wczytywanych z bazy danych. Dla testu wykonałem:

Kod: Zaznacz cały

<?php 
...
echo 'ąćńłóżźć';
echo $row['test']; //wartość zmiennej ąćńłóżźć
...
?>
po odpaleniu skryptu w przeglądarce
ąćńłóżźć
?
Czyli jak widać apache koduje według ustawień w edytorze, php.ini itp UTF-8 bez BOM
Natomiast baza danych generuje błędy.
Pójdźmy dalej: rekord test został wygenerowany za pomocą phpmyadmin, w którym domyślne kodowanie to utf8, tak samo jak tabela, kolumna itp.
Po eksporcie bazy do pliku *.sql i odczytaniu przed dowolny edytor polskie znaki są wyświetlane poprawnie.

Czy ktoś ma pomysł w czym leży błąd, usterka?

: 18 listopada 2008, 11:33
autor: fenix23
Oczywiście problemy są z kodowanie. I wydaje mi się że musisz uściślić co i jak zostaje wyświetlane. Do sprawdzenia jest:

-kodowanie pliku php w konsoli (domyslnie ISO)
-kodowanie w apache2 (miałem problem że na siłę kodował w utf8)
-kodowanie danych wpisanych w phpmyadminie
-kodowanie danych wpisanych za pomocą skryptu z powłoki.

Oczywiście całość musi mieć to samo kodowanie ale to jest oczywiste.

: 19 listopada 2008, 13:02
autor: matyskiewicz
Dziś wykonałem 2 testy:
1. Postawiłem na windowsie serwer WAMP (w którym nie miałem takich problemów) i przekopiowałem pliki php jak i dane do bazy. Rezultat taki jak na debianie
2. Wyeksportowałem dane z bazy danych za pomocą XMLa do Accessa no i polskie znaki są.

1. kodowanie pliku php w konsoli (domyslnie ISO)
2. kodowanie w apache2 (miałem problem że na siłę kodował w utf8)
3. kodowanie danych wpisanych w phpmyadminie
4. kodowanie danych wpisanych za pomocą skryptu z powłoki.
1. nie rozumiem pytania
2. utf8
3. utf8-general-ci (domyślnie, tabela, komórka itp...)
4. nie rozumiem pytania

Czyli wygląda na to ze w Mysql jest wszystko ok, czyli prawdopodobnie źle koduje apache... No ale:

Kod: Zaznacz cały

 echo 'żćźńłóęą';
wyświetla ok...

: 19 listopada 2008, 13:23
autor: fenix23
matyskiewicz pisze:1. nie rozumiem pytania
2. utf8
3. utf8-general-ci (domyślnie, tabela, komórka itp...)
4. nie rozumiem pytania
1. Jeśli piszemy w konsoli to plik ma również jakieś kodowanie. jak napiszemy
echo ąźźżżććłłłłóóóóńńńęęę > plik i wydamy poleceni file plik to zobaczymy w jaki sposób plik jest kodowany. Osobiście pracuje na mcedit i on zapisuje pliki w domyslnym kodowaniu powłoki. Popatrz też na locale

4. Do bazy mysql możemy dwojako wpisywać dane. Jeden sposób to skrypt zakodowany tak jak w konsoli a drugi to wpisane ręcznie przez phpmyadmina które może mieć kodowanie zależne od tego jakie mamy kodowanie w phpmyadminie.

cat /etc/apache2/conf.d/charset

w tym miejscu można sprawdzić wymuszone kodowanie w apache2. Może do czegoś się przyda.

Gdzieś czytałem że można gdzieś te dane z bazy przekodować w razie potrzeby ale jak masz możliwość nie rozpieprzając bazy ustawić wszystko jednolicie to chyba będzie najlepiej.

: 19 listopada 2008, 13:43
autor: matyskiewicz
No to już coś mamy.
4. UTF-8
1. Zakodował jakieś ("a umlat" itp...) po odczytaniu w przeglądarce (plik.txt) wyświeliły się:
�������汶���������
Ponadto na serwerze zainstalowałem forum phpbb no i również są polskie znaki?
Wykonałem plik również przez vim no i również są krzaczki.
Masz jakaś propozycję zmiany tego problemu. Ja już nie wiem kompletnie co to może być...

: 19 listopada 2008, 14:04
autor: fenix23
A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?

PS: Wstawiaj listingi za pomocą

Kod: Zaznacz cały

[code] Listing 
[/code]

: 19 listopada 2008, 14:58
autor: matyskiewicz
fenix23 pisze:A jak przestawisz w przeglądarce kodowanie na właściwe to jest dobrze?
Też nie :/

: 19 listopada 2008, 23:00
autor: grucha
Bazę miałeś czystą, czy wgrywałeś z backupu? Jak się mają metody porównywania napisów w bazie do charsetów ustawionych na serwerze?

: 20 listopada 2008, 11:01
autor: matyskiewicz
Baza była budowana na bieżąco bezpośrednio przez phpmyadmin na serwerze. Porównywanie napisów zarówno w bazie, tabeli jak i komórce jest ustawione na UTF8-general-ci

[ Dodano: 2008-11-24, 08:20 ]
Znalazłem artykuł pośrednio rozwiązujący ten problem: http://wortal.php.pl/wortal/artykuly/po ... ki_a_mysql