• 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

Object Storage Arubacloud
–1 głos
801 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 (287,950 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 (601,530 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,170 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,724 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,524 wizyt
0 głosów
2 odpowiedzi 5,756 wizyt
pytanie zadane 18 listopada 2017 w C i C++ przez PanJaqb Początkujący (360 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...