To jest problem z kodowaniem znaków. W związku z tym mogło się to nie udać na wielu różnych poziomach, ale najprawdopodobniej ciągi znaków w Twojej bazie danych są zakodowane w formacie utf-8, a Ty prezentujesz je jako iso-8859-1. Albo na odwrót.
Właściwym sposobem rozwiązania tego problemu jest wyprostowanie zestawu postaci. Najprostszą strategią, ponieważ używasz PHP, jest używanie iso-8859-1 w całej aplikacji. Aby to zrobić, musisz upewnić się, że:
- Wszystkie pliki źródłowe PHP są zapisywane jako iso-8859-1 (nie mylić z cp-1252).
- Twój serwer WWW jest skonfigurowany do obsługi plików z rozszerzeniem
charset=iso-8859-1
- Alternatywnie możesz nadpisać ustawienia serwerów WWW z dokumentu PHP, używając
header
.
- Ponadto użytkownik może wstawić meta-tag w was HTML, który określa to samo, ale nie jest to bezwzględnie konieczne.
- Państwo może również określić
accept-charset
atrybut swoich <form>
elementów.
- Tabele bazy danych są zdefiniowane z kodowaniem latin1
- Połączenie z bazą danych między PHP a bazą danych jest ustawione na latin1
Jeśli masz już dane w swojej bazie danych, powinieneś mieć świadomość, że prawdopodobnie są już pomieszane. Jeśli nie jesteś jeszcze w fazie produkcji, po prostu wyczyść wszystko i zacznij od nowa. W przeciwnym razie będziesz musiał wykonać pewne czyszczenie danych.
Uwaga na temat metatagów, ponieważ wszyscy źle rozumieją, czym one są:
Kiedy serwer sieciowy wyświetla plik (dokument HTML), wysyła pewne informacje, które nie są prezentowane bezpośrednio w przeglądarce. Jest to znane jako nagłówki HTTP. Jednym z takich nagłówków jest Content-Type
nagłówek, który określa typ MIME pliku (np. text/html
), A także kodowanie (aka charset). Chociaż większość serwerów WWW wysyła Content-Type
nagłówek z charset
informacją, jest to opcjonalne. Jeśli go nie ma, przeglądarka zamiast tego zinterpretuje wszelkie metatagi z http-equiv="Content-Type"
. Należy pamiętać, że metatag jest interpretowany tylko wtedy, gdy serwer WWW nie wysyła nagłówka. W praktyce oznacza to, że jest używany tylko wtedy, gdy strona jest zapisana na dysku i stamtąd otwierana.
Ta strona zawiera bardzo dobre wyjaśnienie tych rzeczy.