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

Odczytywanie z SQL i moje problemy z kodowaniem

Object Storage Arubacloud
0 głosów
216 wizyt
pytanie zadane 27 lutego 2016 w PHP przez Eerie Mądrala (7,130 p.)

Mam bazę SQL w której jak na razie (dla przetestowania) jest jeden rekord. Kolumny mają nazwy number oraz word. Number to po prostu numer rekordu który z każdym kolejnym rekordem jest inkrementowany. A word to po prostu słowo.

W tym jedynym rekordzie w kolumnie word jest wartość zażółćgęśląjaźń. W bazie danych wszystko wyświetla się prawidłowo.

Kolumna 'word' ma collation ustawiony na utf8_polish_ci.

W PHP mam funkcję, która odpowiada za odczytanie rekordu z bazy.

function selectWord($connection, $number)
{
	$connection->query('SET character_set_connection=utf8');
	$connection->query('SET character_set_client=utf8');
	$connection->query('SET character_set_results=latin2');
		
	$query = 'select word from hasla where number = '.$number;
		
	if($result = $connection->query($query))
	{
		$word = $result->fetch_array();
		return $word[0];
	}
	else
	{
		echo "Błąd krytyczny nr. 2, powiadom twórcę strony.";
		return -1;
	}
}

Mój problem polega na tym, że hasło jest odczytywane jako za���g�l�ja�� .

Plik, w którym znajduje się ta funkcja, ma ustawiony charset na utf-8.

<meta charset="utf-8"/>

W sekcji head mam jeszcze linijkę:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />

Wszystkie pliki na serwerze mają ustawione kodowanie utf-8 without BOM.

I w ogóle nie mam pomysłu co mogę zrobić, by odczytywało hasło do mojego wisielca poprawnie, jeśli ma ono polskie znaki. Bo jeśli nie ma polskich znaków, to wszystko jest ok. Kurde, a mogłem robić wisielca po angielsku to oszczędziłbym sobie wszelkich problemów z kodowaniem.

Macie może jakąś sugestię jak to poprawić? Bo prace nad moim wisielcem stoją w miejscu, a mnie tu skręca z wściekłości że jeszcze tego nie ukończyłem bo zatrzymują mnie głupie bugi z którymi nie mam pojęcia jak sobie poradzić.

1 odpowiedź

+1 głos
odpowiedź 27 lutego 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 27 lutego 2016 przez Eerie
 
Najlepsza
Zapewne wystarczy ustawienie odpowiedniego kodowania przy połączeniu z bazą.

Widzę, że korzystasz z mysqli a więc: http://php.net/manual/pl/mysqli.set-charset.php

Wystarczy to zrobić raz, np. zaraz po połączeniu z bazą. Nie wiem co to są za dziwne zapiski, które ty masz.
komentarz 27 lutego 2016 przez Eerie Mądrala (7,130 p.)
Te dziwne zapiski były efektem tego, że ktoś inny już mi próbował pomagać z moim wisielcem i to właśnie inna osoba poleciła mi tak zrobić. Ale teraz usunąłem te trzy linie na począku funkcji, a potem zaraz po polączneiu z bazą wywołałem tą funkcję, którą opisuje twój link. Efekt jest taki, że hasło jest poprawnie odczytywane z bazy (roboczo, w celu testowania wypisuję je na górze ekranu instrukcją echo). Niestety mój kod w javascript źle porównuje literki ze znakami w moim haśle. Tak jak to wygląda na tym screenie: http://i.imgur.com/mFl1XsO.png Ale tak czy inaczej dzięki za pomoc, a nad błędami w swoim javascripcie pomyślę chwilę sam. Jak widać, mam tu więcej niż jednego buga :P
komentarz 27 lutego 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie wiem co tam dalej może być źle, musisz teraz przeanalizować JSa i zobaczyć gdzie się te literki gubią. Powodzenia :)
1
komentarz 27 lutego 2016 przez efiku Szeryf (75,160 p.)
> serwer serwuje inne kodowanie niż utf8

> stara wersja PHP

> pliki mają być w UTF-8 bez BOM (  każdy edytor/ide tworzy pliki z takim kodowaniem )

> kodwanie w utf8_polish_ci w bazie

> Łącz za pomocą PDO.

Sprawdź powyższe podpunkty ;)
komentarz 27 lutego 2016 przez Eerie Mądrala (7,130 p.)
A problem z JS był banalny. Okazało się, że już kiedyś rozwiązałem problem z javascriptem przy okazji szperania w nim, wcześniej niż zajmowałem się szukaniem rozwiązania na mój bug z kodowaniem w bazie danych. I to rozwiązanie było dobre, tylko... trzymałem ten plik na dysku i zapomniałem wrzucić na serwer nowszej wersji, ciągle mając na serwerze starą wersję przy której ten problem ciągle występował. Jaki epicki fail xD
komentarz 27 lutego 2016 przez efiku Szeryf (75,160 p.)

Eerie jak działasz na linuxie, to polecam rsync zobaczyć co potrafi:)

komentarz 28 lutego 2016 przez Eerie Mądrala (7,130 p.)
Ale akurat nie działam na Linuxie, tylko na Windows 7.

Podobne pytania

+1 głos
2 odpowiedzi 633 wizyt
pytanie zadane 6 lipca 2020 w PHP przez Hype Początkujący (340 p.)
0 głosów
2 odpowiedzi 185 wizyt
+1 głos
1 odpowiedź 828 wizyt
pytanie zadane 12 sierpnia 2017 w HTML i CSS przez Milesq Nałogowiec (32,020 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 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!

...