Encodage de caractères étranges dans la base de données : décodage d'un ancien script, échec d'un nouveau script
Énoncé du problème :
Une migration de site Web d'un ancien script vers un nouveau script basé sur CodeIgniter rencontre des problèmes d'encodage des caractères. L'ancien script peut afficher les caractères persans stockés dans la base de données, tandis que le nouveau script affiche le texte corrompu.
Analyse :
Les tables et colonnes de la base de données sont configurées avec un assemblage de utf8_persian_ci. Le nouveau script utilise également UTF-8 comme jeu de caractères et assemblage. Le problème vient de la manière dont les caractères étaient initialement stockés dans la base de données lors de l'utilisation de l'ancien moteur TubaDBE.
Comportement de l'ancien script :
Lorsque des caractères persans étaient insérés dans le base de données utilisant TubaDBEngine, ils étaient stockés non pas en UTF-8 mais dans un encodage différent, ce qui entraînait l'affichage de caractères tels que "عمران" dans la base de données. Cependant, l'ancien script était capable de décoder et d'afficher ces caractères correctement.
Nouveau problème de script :
Le nouveau script, bien que configuré correctement pour UTF-8, ne peut pas décoder les caractères initialement stockés dans la base de données à l'aide de l'encodage de TubaDBEngine. En conséquence, le nouveau script affiche du texte corrompu lors de la récupération des données.
Solution :
SELECT CONVERT(BINARY CONVERT(fName USING latin1) USING utf8) FROM tnewsgroups
UPDATE tnewsgroups SET fName = CONVERT(BINARY CONVERT(fName USING latin1) USING utf8)
Après la conversion des données, le nouveau script devrait être capable de récupérer et d'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!