Váš problém souvisí s kódováním vaší znakové sady. Je důležité, abyste celou kód má stejnou znakovou sadu, aby se předešlo problémům, kdy se znaky zobrazují nesprávně.
Existuje poměrně málo nastavení, která je třeba správně definovat, a já bych důrazně doporučil UTF-8, protože obsahuje většinu písmen, která byste potřebovali (skandinávské, řecké, arabské, ruské atd.).
Zde je malý seznam věcí, které je třeba nastavit na konkrétní znakovou sadu.
Záhlaví
-
Nastavení znakové sady v hlavičkách HTML i PHP na UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(Záhlaví PHP musí být umístěno před jakýmkoli výstup (echo, mezery, HTML)!)
-
HTML:
<meta charset=utf-8" />
(Hlavičky HTML jsou umístěny v
<head>
/</head>
tag)
-
Připojení
-
Také musíte zadat znakovou sadu v samotném připojení . Pro váš příklad PDO je to provedeno takto
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Všimněte si
charset=utf8
-atribut. Jiná MySQL-API mají různé způsoby, jak toho dosáhnout, pokud v budoucnu použijete něco jiného.
Databáze
-
Vaše databáze a jeho tabulky musí být nastaveny na UTF-8. Všimněte si, že znaková sada není stejné jako řazení. Vidím, že jste již nastavili řazení na UTF-8, takže je to dobré, ale totéž udělejte pro celou databázi a všechny tabulky.
Můžete to provést spuštěním níže uvedených dotazů jednou pro každou databázi a tabulky (například v phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Všimněte si, že u jakýchkoli dat již uložených v databázi nebude automaticky opravena jejich porušená znaková sada. Je tedy důležité, abyste to udělali před vložením dat nebo abyste je znovu vložili po nastavení znakové sady.
Specifikace php.ini
-
Ve vašem
php.ini
měli byste zadat výchozí znakovou sadu pro vaši platformu, jako je tentodefault_charset = "utf-8";
Kódování souborů
- Je také důležité, aby
.php
samotný soubor je kódován UTF-8. Pokud k psaní kódu používáte Notepad++, lze to provést v rozevíracím seznamu „Formát“ na hlavním panelu.
Emodži
- V MySQL (v tabulce, databázi i objektu připojení) budete muset zadat
utf8mb4
znaková sada, na rozdíl od běžnéhoutf8
, pokud chcete pracovat s emotikony.
V Javě se moc nevyznám, ale pokud i tam můžete nastavit atributy na UTF-8, udělejte to. V podstatě vše, co lze nastavit na konkrétní znakovou sadu, by mělo být nastaveno stejně.
Pokud budete postupovat podle všech výše uvedených pokynů, je pravděpodobné, že váš problém bude vyřešen. Pokud ne, můžete se podívat na tento příspěvek StackOverflow: UTF-8 až do konce .