Étrange écart de codage des caractères dans le stockage et la récupération des données
Dans le but de réécrire un ancien site Web utilisant des caractères persans, vous avez été confronté à un écart étrange entre la façon dont les données sont stockées et récupérées. L'ancien script affiche correctement les caractères persans, tandis que le nouveau les présente avec le même encodage que la base de données, qui apparaît déformé.
Pour comprendre ce problème, il est important de noter :
Lorsque vous saisissez des caractères persans à l'aide de l'ancien script, ils apparaissent comme des séquences étranges comme عمران dans la base de données. Cependant, l'ancien script les récupère et les affiche correctement. Cela suggère que TUBADBENGINE utilise un schéma de codage distinct, éventuellement basé sur ISO-8859-1, qui n'est pas reconnu par le nouveau script.
À l'inverse, si vous insérez directement des caractères persans dans la base de données, ils sont stockés comme prévu et récupéré correctement par le nouveau script. Cependant, l'ancien script les affiche désormais sous forme de points d'interrogation (????). En effet, le mécanisme de décodage des caractères de l'ancien script attend un encodage différent de celui utilisé par la base de données pour les insertions directes.
La solution réside dans la conversion des données existantes dans la base de données de l'encodage utilisé par TUBADBENGINE vers l'UTF. -8 encodage attendu par CodeIgniter. Pour ce faire :
UPDATE tnewsgroups SET fName = CONVERT(INARY CONVERT(fName USING latin1) USING utf8);
Une fois les données converties, les nouveaux et les anciens scripts doivent afficher correctement les caractères persans.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!