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:
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ą
[/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