Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PDO] Kodowanie znaków
rav1989
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

Ostrzeżenie: (0%)
-----


Witam

Mam drobny problem z kodowaniem polskich znaków przy zapisywaniu do bazy danych... korzystam z PDO do obsługi bazy.

Gdy dodam wpis na stronie mi się on ładnie wyświetli (tak jak trzeba) natomiast jak podejrzę ten tekst w phpMyAdmin to mam niezłą sieczkę...

dla przykładu dodaję ó€ęłśąńćźż ÓĘŁŚĄŃĆŹŻ a w badzie mi zapisuje ó€ęłśąńćźż ÓĘŁŚĄŃĆŹŻ
metoda porównywania to utf8_general_ci natomiast wszystkie pliki są w UTF-8 bez BOM tak samo jak strona (IMG:style_emoticons/default/biggrin.gif)

Niby nic wielkiego bo strona działa normalnie ale jednak chciałbym aby w bazie też był ten sam tekst co na stronie bez krzaków...

Pozdrawiam
Rav
Go to the top of the page
+Quote Post
toaspzoo
post
Post #2





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


daj pliki w iso8859-2

lub nagłówek na stronie, przez którą dodajesz header() z utf-8
Go to the top of the page
+Quote Post
rav1989
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

Ostrzeżenie: (0%)
-----


Cytat(toaspzoo @ 2.07.2011, 17:25:47 ) *
daj pliki w iso8859-2

lub nagłówek na stronie, przez którą dodajesz header() z utf-8

Pierwsze sprawiło, że i w bazie i na stronie pojawiły się krzaki, natomiast druga opcja w ogóle nie dała efektu...
Go to the top of the page
+Quote Post
morbic
post
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Powinieneś bezpośrednio po połączeniu się do bazy ustawić sposób kodowania przy połączeniu - nie wiadomo, jaki jest domyślny w MySQL. To, że phpMyAdmin używa UTF8 nic nie znaczy. Bardziej tu szukałbym problemu.

Możesz to zrobić na dwa sposoby:
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

lub
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
  2. $dbh->exec("SET NAMES utf8");


Musisz jednak liczyć się z tym, że w momencie zmiany kodowania przy połączeniu, wszystkie wyświetlane do tej pory poprawnie dane zaczną pokazywać się na stronie tak samo, jak wyświetla je phpMyAdmin. Z kolei nowe, dodawane przez skrypt dane będą już zapisywane poprawnie.

Ten post edytował morbic 2.07.2011, 17:09:21
Go to the top of the page
+Quote Post
rav1989
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

Ostrzeżenie: (0%)
-----


Cytat(morbic @ 2.07.2011, 18:07:48 ) *
Powinieneś bezpośrednio po połączeniu się do bazy ustawić sposób kodowania przy połączeniu - nie wiadomo, jaki jest domyślny w MySQL. To, że phpMyAdmin używa UTF8 nic nie znaczy. Bardziej tu szukałbym problemu.

Możesz to zrobić na dwa sposoby:
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

lub
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
  2. $dbh->exec("SET NAMES utf8");


Musisz jednak liczyć się z tym, że w momencie zmiany kodowania przy połączeniu, wszystkie wyświetlane do tej pory poprawnie dane zaczną pokazywać się na stronie tak samo, jak wyświetla je phpMyAdmin. Z kolei nowe, dodawane przez skrypt dane będą już zapisywane poprawnie.


Zrobiłem to pierwsze ale wyskoczył mi błąd...

Cytat
Fatal error: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in C:\wamp\www\config.php on line 23
Go to the top of the page
+Quote Post
morbic
post
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Najbezpieczniej używać sposobu drugiego.
Go to the top of the page
+Quote Post
rav1989
post
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

Ostrzeżenie: (0%)
-----


Cytat(morbic @ 2.07.2011, 19:05:13 ) *
Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Najbezpieczniej używać sposobu drugiego.

No i właśnie działa ten drugi bez zarzutu
Serdecznie dziękuję za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(morbic @ 2.07.2011, 19:05:13 ) *
Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Dziwne, w dokumentacji nadal jest
http://pl2.php.net/manual/en/ref.pdo-mysql.php
Go to the top of the page
+Quote Post
morbic
post
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Źle się wyraziłem, ogólnie nie zniknęła. Wygląda to na bug w którejś z wersji PHP, który został później poprawiony.

https://bugs.php.net/bug.php?id=47224
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:29