• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd kodowania znaków na linii PHP->SQL i SQL-PHP

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
–1 głos
701 wizyt
pytanie zadane 11 września 2016 w PHP przez Zarix Nowicjusz (160 p.)
zmienione kategorie 11 września 2016 przez Arkadiusz Waluk
Cześć,

ostatnimi czasy mam wielki problem z kodowaniem polskich znaków. Zainstalowałem serwer Apache na swoim komputerze i pojawił się pewien problem, którego nie umiem rozwiązać. Kodowanie polskich znaków w samej treści strony działa, ustawione jest na utf-8 zarówno w nagłówku head (<meta http-equiv="content-type" content="text/html; charset=utf-8">) jak i w formacie pliku. Gdy w treści dokumentu pojawia się polski znak jest on kodowany dobrze, lecz problem pojawia się w momencie wstawiania nowego rekordu do bazy danych jak i uaktualniania poprzednich. Gdy poprzez prosty skrypt php (http://pastebin.com/QXcmKDnH) próbuje wrzucić co do bazy danych np. "Mężczyzna" w bazie danych wygląda to tak: "Mężczyzna" i tak jest też później odczytywane po wyciągnięciu z bazy danych przez skrypt php. Sortowanie połączenia z serwerem mam ustawione na utf8mb4_general_ci ( i tu może być problem, lecz gdy wszędzie dam to kodowanie to nic nie zmienia, a na zwykłe utf8_general_ci nie da się wybrać).  Cała baza danych ma ustawione porównywanie napisów na utf8_general_ci tak samo tabela i komórka w tabeli. Dodatkowo nawet jeśli zmienię wszystko na utf8_polish Ci również nic to nie daje. Przejrzałem masę stron i żadna z odpowiedzi nie rozwiązała mi problemu. Próbowałem ustawiać domyślne kodowanie w php.ini, w .htacess, lecz nic to nie dało. Proszę o pomoc, bo być może jest to prozaiczny błąd, który zablokował moją dalszą pracę :/
Ps. Jeśli zmienię rekord ręcznie wstawiając słowo "Mężczyzna" zapisuje mi to dobrze z polskimi znakami i tak też odczytuje :)

3 odpowiedzi

0 głosów
odpowiedź 11 września 2016 przez Arkadiusz Waluk Ekspert (286,610 p.)
mysql_query('SET NAMES utf8');
mysql_query('SET CHARACTER_SET utf8_general_ci');

A co to? Całe połączenie z bazą realizujesz przez mysqli, a tu kodowanie nagle ustawiasz przestarzałym mysql_?

Spróbuj w ten sposób http://php.net/manual/en/mysqli.set-charset.php

komentarz 11 września 2016 przez Zarix Nowicjusz (160 p.)
Próbowałem:

mysqli_set_charset($connect,"utf8");

oraz:

mysqli_set_charset($connect,"utf8_general_ci");

Bez zmian.
1
komentarz 11 września 2016 przez efiku Szeryf (75,160 p.)
Mysqli? :p używamy PDO.
Pliki w utf8 bez bom. W bazie utf8_polish_ci , PDO($dsn."charset=UTF8", user,pass)
serwer serwujący w utf8 tyle wystarczy. Na linuxach nie ma tego problemu :)
2
komentarz 11 września 2016 przez Comandeer Guru (594,340 p.)

W bazie utf8_polish_ci 

Raczej utf8mb4_polish_ci.

 Mysqli? :p używamy PDO.

Jeśli system korzysta wyłącznie z MySQL i nic nie wskazuje na to, by miało się to zmienić, to mysqli daje większą wydajność. Jedyny plus PDO w tym wypadku to mniej upierdliwa składnia ;) 

komentarz 11 września 2016 przez efiku Szeryf (75,160 p.)
https://wwphp-fb.github.io/faq/databases/mysqli-or-pdo/ dla ciekawskich. Mhm, to moze niech zostanie przy mysql^^. Zresza, przy obecnym kodzie zmiana raczej jest już nie możliwa.
0 głosów
odpowiedź 11 września 2016 przez 123skiper Bywalec (2,180 p.)

Dodaj:

mysqli_set_charset($zmienna_polaczenia,"utf8");

po definicji połączenia

komentarz 11 września 2016 przez Zarix Nowicjusz (160 p.)
Tego już próbowałem i nic nie zmieniło :/
0 głosów
odpowiedź 12 września 2016 przez Zarix Nowicjusz (160 p.)
Ma ktoś jeszcze jakiś pomysł? :/
komentarz 14 września 2016 przez Zarix Nowicjusz (160 p.)
Ok, problem rozwiązało używanie PDO, metody ustawiania charsetu w msqli nic nie zmieniały, lecz po przerzuceniu się na PDO nie było tego problemu. Dziękuje za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 1,668 wizyt
pytanie zadane 26 czerwca 2017 w SQL, bazy danych przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
1 odpowiedź 1,361 wizyt
0 głosów
2 odpowiedzi 5,442 wizyt
pytanie zadane 18 listopada 2017 w C i C++ przez PanJaqb Początkujący (360 p.)

91,846 zapytań

140,522 odpowiedzi

317,028 komentarzy

61,170 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...