Skocz do zawartości
neb

[mysql] nie zapisują się znaki takie jak wielokropek, dolny cudzysłów

Polecane posty

Witam wszystkich,

Niedawno zauważyłem, że w moim programie php korzystającym z mysql istnieje pewien problem: jeśli dodam do bazy tekst ze znakami takimi jak … – „ “ ” lub znaki obcymi jak np. è , to gdy chcę ten tekst pobrać z bazy wyświetlają się one jako znaki zapytania (?). HTML i PHP jest w UTF-8, do mysql zawsze wysyłam SET NAMES 'utf8' , czyli wszędzie kodowanie jest takie samo, więc to chyba nie ono jest przyczyną.

 

Co więc może nią być?

 

Będę wdzięczny za odpowiedź. Od wczoraj się nad tym głowię. Szukałem w internecie czy ktoś już miał taki problem, ale za bardzo nie wiem jak to ująć. Dziwne jest to, że z polskimi znakami nie ma problemu a z np. è jest. Myślałem, ze może to wina mojej przeglądarki (brak odpowiednich czcionek lub coś takiego), ale na innych stronach wyświetlają mi się è itp.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sprawdziłem kilka znaków i działa - dziękuję!

 

tylko, jesli dobrze zrozumiem, mam teraz dla kazdego tekstu wrzucanego do bazy robić kilkadziesiąt str_replace(znak, kod, $aaa)? Czy może jest jakaś funkcja która to robi automatycznie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
A w jaki sposób w php i html to robisz? Wysyłasz nagłówki czy meta?

Pliki zapisane są w UTF-8, meta jest ustawione na UTF-8 i nagłowek zrobiłem na "application/xhtml+xml; charset=utf-8".

 

Zrobiłem taki test:

-----------------------------------------------------

$a = <problematyczne znaki>;

echo $a;

<dodanie do bazy $a>

$a_new = <odczytanie z bazy $a>

echo $a_new

-----------------------------------------------------

Pierwsze 'echo' wyswietla się poprawnie, drugie - nie, czyli z tego by wynikało, że winna jest baza danych.

 

htmlentities()

Działa! ... ale zamienia też na znaczniki polskie litery, więc i tak musiałbym póżniej robić kilka str_replace(kod, polska_litera,$a)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To w takim razie jaką masz w bazie metodę porównywania napisów (per kolumna/tabela)? Chodzi o kolumna varchar collate... przykładowo.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dokładnie się na tym nie znam ... oto co jest w confie, to chyba coś z tego bedzie:

 

character_set_results: latin1

 

character_set_server: latin1

 

character_set_system: utf8

 

collation_connection: latin1_swedish_ci

 

collation_database: latin1_swedish_ci

 

collation_server: latin1_swedish_ci

 

Na razie poradziłem sobie tak, że wszystkie dane zapisywane do bazy przepuszczam przez htmlentities(), a odczytywane z niej przez html_entity_decode().

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×