Tant de choses peuvent mal tourner ici, car la base de données, les soumissions de formulaires et les littéraux de chaîne de code source sont tous impliqués. Je suppose que vous voulez utiliser UTF-8, car avec tout autre encodage typique (CP1252, Latin1), vous serez foutu lorsque vous voudrez utiliser json_
ou accepter plus de ~200 caractères différents.
La première chose à faire est de supprimer tout type de code de conversion, etc., écrit dans le but d'essayer de résoudre les problèmes d'encodage. Comme utf8_encode
, htmlentitites
, *_replace
.. peu importe.
Encodage source.
$str = "· Close up the server";
Lors de l'écriture de ce qui précède, le fichier source PHP doit être physiquement encodé en UTF-8. Si vous êtes sous Windows, vous devez explicitement le faire ou le configurer. UTF-8 ne se produit pas par magie sous Windows.
Soumission du formulaire
Lorsque l'utilisateur soumet un formulaire, la charge utile sera dans l'encodage que vous avez déclaré pour la page. Vous pouvez le déclarer ainsi :
header("Content-Type: text/html; charset=utf-8");
Mais n'importe qui peut réellement soumettre des octets arbitraires à votre serveur, vous devez donc valider que l'entrée est en UTF-8 avant de continuer. mb_check_encoding
c'est bien.
Base de données
Étant donné qu'à ce stade, vos données arrivent au format UTF-8, vos chaînes d'entrée sont au format UTF-8. Vous devez le préciser après vous être connecté à la base de données, en spécifiant un encodage de connexion.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
Cela oblige la base de données à lire votre entrée en UTF-8 et à coder sa sortie en UTF-8. Vous voudrez également définir vos colonnes/tables/bases de données sur UTF-8 également.
Séquences d'échappement Unicode \uxxxx
ou \uhhhh\ullll
ou \Uxxxxxxxx
ne sont pas pris en charge en PHP.