2009-12-15 19 views
6

Próbuję wyprowadzić informacje o produkcie przechowywane w bazie danych MySQL, ale wypisuje dziwne znaki, takie jak diament ze znakiem zapytania w środku.Baza danych MySQL PHP dziwne znaki

myślę, że może to być problem kodowania/UTF8, ale ja określone kodowanie chcę:

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

Czy to prawda? Co powinienem sprawdzić?

+0

się opublikuj w phpadvent ten sam dziwny problem z postacią: http://phpadvent.org/2009/character-sets-by-paul-reinheimer – vsr

Odpowiedz

20

Jeśli tylko dane, które przychodzi z bazy danych ma dziwne znaki w nim, upewnij się, że połączenie MySQL jest również w UTF-8 za pomocą:

mysql_query("SET NAMES UTF8"); 

przed innymi zapytaniami. W przeciwnym razie, jeśli znaki pojawiają się również w plikach "odręcznych", upewnij się, że pliki są zapisane w edytorze jako UTF-8. Można też spróbować ustawić nagłówek charset przez PHP:

header('Content-type: text/html; charset=UTF-8'); 

Również upewnić się, że wszystkie pola w tabelach jesteś odpytywanie są ustawione jako pewnego wariantu UTF-8, na przykład utf8_general_ci.

+0

Dobre wyjaśnienie, Tatu, – BenTheDesigner

+0

mysql_query ("SET NAMES UTF8"), pracowałem dla mojego wordpress postu problem ekstrakcji (znak zapytania w romb). dzięki – themerlinproject

4

Ostatni raz miałem ten problem, rozwiązanie było podobne do tego, co powiedział Tatu Ulmanen, ale nieco inaczej ...

Więc jeśli robi jego rozwiązanie nie działa, spróbuj wymienić

mysql_query("SET NAMES UTF8"); 

z

mysql_query("SET NAMES latin1"); 

Mówię to, ponieważ domyślna CharacterSet w MySQL Latin1, a to, co jest wykorzystywane przez większość czasu ....

nadzieję, że pomoże ...

4

Zakładam, że chcesz być wynik w utf8

  • zaoszczędzić skrypt php utf8 zakodowane
  • upewnić się, że nagłówek HTTP (lub meta tagi) mówi, że wyjście jest utf8
  • wszystkie tabele w MySQL powinny być utf8
  • na koniec, połączenie między klientem a serwerem powinno być utf8. (To może być obsługiwane gdzieś w ustawieniach php.ini lub poprzez następujące zapytanie przeciwko DB:. SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'

Jeśli zastosujemy wszystkie 4 punkt, który nigdy nie powinien nigdy mieć żadnego problemu z połamanymi kodowania

Powiązane problemy