Tolik věcí se zde může pokazit, protože se jedná o databázi, odeslání formuláře a řetězcové literály zdrojového kódu. Předpokládám, že chcete použít UTF-8, protože s jakýmkoli jiným typickým kódováním (CP1252, Latin1) budete mít problém, když budete chtít použít json_
nebo přijmout více než ~200 různých znaků.
První věc, kterou musíte udělat, je odstranit jakýkoli druh kódu konverze atd., který byl napsán s úmyslem pokusit se opravit problémy s kódováním. Například utf8_encode
, htmlentitites
, *_replace
.. To je jedno.
Zdrojové kódování.
$str = "· Close up the server";
Při psaní výše uvedeného musí být zdrojový soubor PHP fyzicky zakódován v UTF-8. Pokud používáte Windows, musíte to udělat nebo nakonfigurovat. UTF-8 se ve Windows neděje magicky.
Formulář se odešle
Když uživatel odešle formulář, obsah bude v jakémkoli kódování, za které jste stránku označili. Můžete to prohlásit takto:
header("Content-Type: text/html; charset=utf-8");
Ale každý může ve skutečnosti odeslat libovolné bajty na váš server, takže před pokračováním byste měli ověřit, zda je vstup v UTF-8. mb_check_encoding
je dobrý.
Databáze
Protože v tomto okamžiku vaše data přicházejí jako UTF-8, vaše vstupní řetězce jsou v UTF-8. Toto musíte zadat po připojení k databázi zadáním kódování připojení.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Díky tomu databáze čte váš vstup v UTF-8 a kóduje jeho výstup v UTF-8. Také byste chtěli nastavit své sloupce/tabulky/databáze na UTF-8.
Unicode escape sekvence \uxxxx
nebo \uhhhh\ullll
nebo \Uxxxxxxxx
nejsou podporovány v PHP.