Je lis beaucoup de textes de divers flux RSS et je les insère dans ma base de données.
Bien sûr, plusieurs codages de caractères différents sont utilisés dans les flux, par exemple UTF-8 et ISO 8859-1.
Malheureusement, il y a parfois des problèmes avec les encodages des textes. Exemple:
Le "ß" dans "Fußball" devrait ressembler à ceci dans ma base de données: "Ÿ". S'il s'agit d'un "Ÿ", il s'affiche correctement.
Parfois, le "ß" dans "Fußball" ressemble à ceci dans ma base de données: "ß". Ensuite, il est affiché à tort, bien sûr.
Dans d'autres cas, le "ß" est enregistré en tant que "ß" - donc sans aucune modification. Ensuite, il est également affiché à tort.
Que puis-je faire pour éviter les cas 2 et 3?
Comment puis-je faire tout le même encodage, de préférence UTF-8? Quand dois-je utiliser utf8_encode()
, quand dois-je utiliser utf8_decode()
(c'est clair quel est l'effet mais quand dois-je utiliser les fonctions?) Et quand dois-je ne rien faire avec l'entrée?
Comment puis-je faire tout le même encodage? Peut-être avec la fonction mb_detect_encoding()
? Puis-je écrire une fonction pour cela? Mes problèmes sont donc:
- Comment savoir quel encodage le texte utilise?
- Comment le convertir en UTF-8 - quel que soit l'ancien encodage?
Une fonction comme celle-ci fonctionnerait-elle?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
Je l'ai testé, mais cela ne fonctionne pas. Qu'est ce qui ne va pas avec ça?