2013-04-20 6 views
5

Gdy widzę dane przechowywane w bazie danych mysql za pomocą phpmyadmin, znaki są przechowywane dokładnie tak samo jak é ç, jednak gdy używam php do wyświetlania tych danych na dokumencie HTML, który ma następującą strukturę :UTF-8 Francuski format znaków akcentowanych

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 
</head> 

<body> 
</body> 
</html> 

mam kwadrat zamiast znaku akcentem, jednak nie mam tego problemu z żadnymi akcentowane znaki na zawartości statycznej, które nie zostały załadowane z MySQL na tej samej stronie.

kiedy widzę na kodzie źródłowym strony, że wydają się być identyczne! na przykład:

części danych statycznych na kodzie źródłowym wyświetlanych jako:

éçà 

części danych pochodzenia MySQL:

éçà 

Próbowałem zastępując

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

z

<meta http-equiv="Content-Type" content="text/html; charset=windows-1552" /> 

iw rezultacie otrzymałem poprawkę mysql, statyczną z kwadratami!

dowolne podpowiedzi?

+1

Wygląda na to zagadnienie błędną. Może Twoje sterowniki DB nie używają UTF-8? Fakt, że dane pochodzące z DB pokazuje OK po zmianie na "Windows-1552" i pliki statyczne nie mogą oznaczać, że plik źródłowy jest (poprawnie) w UTF-8, ale dane z twojego DB przybywa w niewłaściwym formacie kodowania. Cokolwiek się dzieje, trzymaj się UTF-8. – ubik

+0

Dziękuję za odpowiedź, sprawdziłem bazę danych i stwierdziłem, że sortowanie jest ustawione na "latin1_swedish_ci", czy to może być źródłem problemu? – Mbarry

+1

Tak, to jest źródło problemu, przechowujesz swoje dane w ascii w mysql, ale potem próbujesz pokazać je jako utf8 w swoim html .. – Nelson

Odpowiedz

5

To dość powszechny problem charset, trzeba ustawić kodowanie połączenia ręcznie dla połączenia MySQL (te powinny być najpierw zapytań wykonać po nawiązaniu połączenia):

SET NAMES utf8; 
SET CHARACTER SET utf8; 

a także upewnić się każdy stół ma CHARACTER SET zestaw do UTF-8.

Można również zaktualizować server configuration.

+0

Naprawiono za pomocą 'SET NAMES utf8;' wykonywanego zgodnie z sugestią. Dziękuję Ci! – Mbarry

+0

Zobacz http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf, aby uzyskać instrukcje, jak to zrobić automatycznie po stronie serwera. – ubik

2

Wygląda na problem z błędną konfiguracją. Najprawdopodobniej twój DB lub sterowniki nie używają UTF-8.

Fakt, że dane pochodzą z DB pokazuje OK, gdy zmieni się windows-1552 i pliki statyczne nie może oznaczać, że plik źródłowy jest (poprawnie) w UTF-8, ale dane z DB przybywa w niewłaściwym formacie kodowania.

Cokolwiek się dzieje, trzymaj się UTF-8.

UPDATE: Jest wątek, który wyjaśnia, w jaki sposób, aby automatycznie ustawić kodowanie dla połączenia:

Change MySQL default character set to UTF-8 in my.cnf?

+0

Dziękuję Pedro, problem został naprawiony i nie będę trzymał się Windows-1552. gdzie jest termin windows nie ma problemów lol. Dziękuję Ci – Mbarry