Tak wiele rzeczy może się tutaj nie udać, ponieważ w grę wchodzą baza danych, przesyłanie formularzy i literały ciągu kodu źródłowego. Zakładam, że chcesz użyć UTF-8, ponieważ przy każdym innym typowym kodowaniu (CP1252, Latin1) będziesz sfatygowany, gdy będziesz chciał użyć json_
lub zaakceptuj ponad ~200 różnych znaków.
Pierwszą rzeczą do zrobienia jest usunięcie wszelkiego rodzaju kod konwersji itp., który został napisany z zamiarem rozwiązania problemów z kodowaniem. Na przykład utf8_encode
, htmlentitites
, *_replace
.. cokolwiek.
Kodowanie źródła.
$str = "· Close up the server";
Podczas pisania powyższego plik źródłowy PHP musi być fizycznie zakodowany w UTF-8. Jeśli korzystasz z systemu Windows, musisz to zrobić lub skonfigurować. UTF-8 nie działa magicznie w systemie Windows.
Przesłanie formularza
Gdy użytkownik prześle formularz, ładunek będzie w dowolnym kodowaniu, które zadeklarowałeś na stronie. Możesz to zadeklarować w ten sposób:
header("Content-Type: text/html; charset=utf-8");
Ale każdy może w rzeczywistości przesłać dowolne bajty do twojego serwera, więc przed kontynuowaniem powinieneś sprawdzić, czy dane wejściowe są w UTF-8. mb_check_encoding
jest dobry.
Baza danych
Ponieważ w tym momencie twoje dane przychodzą jako UTF-8, twoje ciągi wejściowe są w UTF-8. Musisz to określić po połączeniu z bazą danych, określając kodowanie połączenia.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Dzięki temu baza danych odczytuje dane wejściowe w UTF-8 i koduje dane wyjściowe w UTF-8. Chciałbyś również ustawić swoje kolumny/tabele/bazy danych na UTF-8.
Sekwencje specjalne Unicode \uxxxx
lub \uhhhh\ullll
lub \Uxxxxxxxx
nie są obsługiwane w PHP.