Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Znaki specjalne nie wyświetlają się poprawnie
Forum PHP.pl > Forum > Przedszkole
lekosm2
Hej, mam problem z pobraniem nazw użytkowników,którzy mają znaki specjalne.
Dla przykładu mam użytkownika o nazwie: Ψ♂тoхιc✔Ψ™
W bazie danych wygląda to tak:


Lecz już po pobraniu go z bazy danych na stronie wyświetla się tak: questionmark.gif?o??c??�


Ktoś wie jak rozwiązać ten problem?
Szado
Ustaw poprawne kodowanie podczas łączenia z bazą.
lekosm2
Zrobiłem tak i nicki się poprawnie wyświetlają, ale posty wyglądają tak:
Władzę poznawczą musiemy mu jego czyny z pobudki mogł co ująć od Dobra musiemy mu w przeciwnym razie niebyłoby najwyższego dobra był człowiek trwać ma: więc ma naturalna ustawa moralna wiara niejest wiedzą czyli Wendów. Więc ja niejest biernym.
gino
jeżeli faktycznie tak zrobiłeś, to sprawdź jeszcze kodowanie strony html:

  1. <meta charset="utf-8">


gino

PS. Na pols text, varchar masz założone kodowanie uft8_polish_ci ?
lekosm2
Mam, problem polega na tym, że gdy do bazy danych dodam ręcznie tekst z polskimi znakami, to się poprawnie zapisuje, ale gdy podczas instalacji skryptu są dodawane polskie znaki:
  1. $core->db()->pdo()->exec("INSERT INTO `blog` VALUES (2,'Początek traktatu czasu panowania Fryderyka Wielkiego','poczatek-traktatu-czasu-panowania-fryderyka-wielkiego',1,'<p>Władzę poznawczą musiemy mu jego czyny z pobudki mogł co ująć od Dobra musiemy mu w przeciwnym razie niebyłoby najwyższego dobra był człowiek trwać ma: więc ma naturalna ustawa moralna wiara niejest wiedzą czyli Wendów. Więc ja niejest biernym. Nieskończoność Boską można było spodziewać zawdzięczającej nagrody, niż od tego pokazuje żem ja substancyą Każda kompozycya może np. niebo jako człowiek walczyć musi być wzruszona. Ale wszystkie te rzeczy naturalnych utworzeniem istoty jest przeciw sprawiedliwości Dobraj, którąby przestrzeń ograniczała. Przez wszechmocność Boską można przedstawić lepszy plan względem innych takim razie podług biegu rzeczy możliwe, więc w sobie warunki sprawowania się nie kunsztu. Dyogenes miał nic wydarzyć niemoże, ani więcej nad tą lub zupełne poznanie niebędzie czasem w piosence: Marusieńka po naszym pojęciom o przedmiotach, mają być wzniecone, ażeby Subjekt przez podzielenie realności, albo drugim przypadku bez różnicy w Dobru: że często chwalebna poczciwość upadła, gdyby nasza własna wina. Tak też takie postępowanie niebyłoby najwyższego dobra był ideał świętości Dobraj. Kiedy więc nie było powszechne, tedyćby go czas ograniczał.</p>','<p>Władzę poznawczą musiemy mu jego czyny z pobudki mogł co ująć od Dobra musiemy mu w przeciwnym razie niebyłoby najwyższego dobra był człowiek trwać ma: więc ma naturalna ustawa moralna wiara niejest wiedzą czyli Wendów. Więc ja niejest biernym.','default2.jpg',2,'pl_polski',1,0,".time().",".time().",".time().")");

To w bazie danych zapisują się "krzaki" i później te "krzaki" są wyświetlane na stronie:
<p>Władzę poznawczą musiemy mu jego czyny z pobudki mogł co ująć od Dobra musiemy mu w przeciwnym razie niebyłoby najwyższego dobra był człowiek trwać ma: więc ma naturalna ustawa moralna wiara niejest wiedzą czyli Wendów. Więc ja niejest biernym. Nieskończoność Boską można było spodziewać zawdzięczającej nagrody, niż od tego pokazuje żem ja substancyą Każda kompozycya może np. niebo jako człowiek walczyć musi być wzruszona. Ale wszystkie te rzeczy naturalnych utworzeniem istoty jest przeciw sprawiedliwości Dobraj, którąby przestrzeń ograniczała. Przez wszechmocność Boską można przedstawić lepszy plan względem innych takim razie podług biegu rzeczy możliwe, więc w sobie warunki sprawowania się nie kunsztu. Dyogenes miał nic wydarzyć niemoże, ani więcej nad tą lub zupełne poznanie niebędzie czasem w piosence: Marusieńka po naszym pojęciom o przedmiotach, mają być wzniecone, ażeby Subjekt przez podzielenie realności, albo drugim przypadku bez różnicy w Dobru: że często chwalebna poczciwość upadła, gdyby nasza własna wina. Tak też takie postępowanie niebyłoby najwyższego dobra był ideał świętości Dobraj. Kiedy więc nie było powszechne, tedyćby go czas ograniczał.</p>

Więc problem leży raczej w $core->db()->pdo()->exec(); tylko nie wiem jak go rozwiązać.

A tak wygląda cały moduł instalacji bloga: https://pastebin.com/QTnaYhbW
gino
piszesz teraz o pliku instalatora, rozumiem, że masz plik, który dodaje ten rekord do bazy po uruchomieniu, otwórz ten plik w edytorze i zobacz czy nie położyłeś kodowania w edytorze, ma być też UTF-8

gino

na pola typu text dodaj podczas tworzenia tabeli

Kod
COLLATE utf8_polish_ci
lekosm2
Cytat(gino @ 20.08.2020, 11:36:19 ) *
piszesz teraz o pliku instalatora, rozumiem, że masz plik, który dodaje ten rekord do bazy po uruchomieniu, otwórz ten plik w edytorze i zobacz czy nie położyłeś kodowania w edytorze, ma być też UTF-8

gino

na pola typu text dodaj podczas tworzenia tabeli

Kod
COLLATE utf8_polish_ci


Kodowanie w notepad++ m,am ustawione na utf-8 w module instalacji zamieniłem:
  1. `title` varchar(150) NOT NULL,

na
  1. `title` VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,


I nadal do bazy danych zapisały się krzaki.

Dla pewności sprawdziłem również wszystkie pliki .php czy mają poprawne kodowanie i wszystkie mają UTF-8
viking
Biorąc pod uwagę że ten cały batflat jest polskim produktem naprawdę wątpliwe że nie obsługuje poprawnie pl literek. Chyba że o SET NAMES gdzieś zapomnieli.
lekosm2
Cytat(viking @ 20.08.2020, 12:32:41 ) *
Biorąc pod uwagę że ten cały batflat jest polskim produktem naprawdę wątpliwe że nie obsługuje poprawnie pl literek. Chyba że o SET NAMES gdzieś zapomnieli.

Domyślnie w bazie danych zapisywały się polskie znaki z krzakami i przed zmodyfikowaniem
  1. QueryBuilder::connect("mysql:host=".MYSQL_HOST.";dbname=".MYSQL_DB.";", MYSQL_USER, MYSQL_PASS);

na
  1. QueryBuilder::connect("mysql:host=".MYSQL_HOST.";dbname=".MYSQL_DB.";charset=utf8", MYSQL_USER, MYSQL_PASS);

działało poprawnie ale wtedy nazwy użytkowników ze znakami specjalnymi nie wyświetlały się poprawnie.

Problem dotyczy tylko dodawania danych do bazy danych podczas instalacji, bo gdy dodaje treści z polskimi znakami, z panelu administratora to normalnie się zapisują do bazy danych i nie ma z nimi problemu.

viking
Rzuciłem szybko okiem na ten kod i nie wygląda żeby gdzieś ustawiali prawidłowe kodowanie dla połączeń.
gino
normalnie ten cms chodzi na sqllite, nie używam tego silnika DB może tu leży problem

gino
viking
Najlepszym wyjściem to było by oczywiście zastosować coś bardziej popularnego a nie męczyć się z marnie napisanym kodem. Ja bym szukał czegoś w oparciu o Laravel np. Statamic.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.