Tante cose possono andare storte qui, perché sono coinvolti database, invii di moduli e stringhe letterali del codice sorgente. Presumo che tu voglia usare UTF-8, perché con qualsiasi altra codifica tipica (CP1252, Latin1) sarai fregato quando vorrai usare json_
o accetta più di ~200 caratteri diversi.
La prima cosa da fare è rimuovere qualsiasi tipo di codice di conversione ecc. che è stato scritto con l'intenzione di provare a risolvere i problemi di codifica. Come utf8_encode
, htmlentitites
, *_replace
.. qualunque cosa.
Codifica della sorgente.
$str = "· Close up the server";
Quando si scrive quanto sopra, il file sorgente PHP deve essere codificato fisicamente in UTF-8. Se sei su Windows, devi farlo o configurarlo esplicitamente. UTF-8 non accade magicamente su Windows.
Modulo inviato
Quando l'utente invia un modulo, il payload sarà in qualunque codifica tu abbia dichiarato che la pagina sia. Puoi dichiararlo così:
header("Content-Type: text/html; charset=utf-8");
Ma chiunque può effettivamente inviare byte arbitrari al tuo server, quindi dovresti convalidare l'input in UTF-8 prima di procedere. mb_check_encoding
va bene.
Banca dati
Poiché a questo punto i tuoi dati stanno arrivando come UTF-8, le tue stringhe di input sono in UTF-8. Devi specificarlo dopo la connessione al database, specificando una codifica di connessione.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Questo fa sì che il database legga l'input in UTF-8 e codifichi il suo output in UTF-8. Vorresti anche impostare le tue colonne/tabelle/database anche su UTF-8.
Sequenze di escape Unicode \uxxxx
o \uhhhh\ullll
o \Uxxxxxxxx
non sono supportati in PHP.