[Dev Web] Problème d'encodage [Résolu/Fermé]

Signaler
-
 sculderoy -
Bonjour à tous et à toutes.
Voilà je vous expose mon problème (auquel je ne trouve toujours pas de solution après avoir lu plusieurs dizaines de topics sur différents forums).

Je prépare depuis peu une base de site web qui me sera utile dans l'avenir. Je la test en parallèle pour une association de Basket Ball enfin bref. Mon soucis réside dans l'encodage des pages.

J'ai effectivement précisé à mes pages l'encodage UTF-8 et elles l'ont bien compris puisque lorsque j'écris en dur dans mes pages, celles-ci ne posent aucun problèmes et m'affichent mes petits caractères spéciaux sans demander leur reste. Néanmoins, lorsque je lie ma base de données à mes pages dynamiques (comme tout petit webmaster banal j'utilise PHP et MySQL) les caractères spéciaux se transforment en ce célèbre ?. Le problème m'était déjà arrivé mais à l'inverse, lorsque j'écrivais en dur dans les pages... Mais jamais en liant avec la DB.

Je me suis donc baladé dans PhpMyAdmin pour modifier l'encodage de mes tables (vu que j'ai tout de suite pensé que ça venait de ça) et même après les avoir fait passer en utf8_bin (j'ai supposé que c'était le meilleur, j'ai également testé utf8_general) mais... rien n'a fonctionné et mon problème me reste sur les bras...

Une petite idée pour me sortir de ce pétrin ?

Merci beaucoup d'avance.

3 réponses

Messages postés
784
Date d'inscription
vendredi 26 juin 2009
Statut
Membre
Dernière intervention
21 janvier 2010
52
salut,
utilise tu htmlentities dans ton traitement des variables qui sont enregistrés ?
Ce que je pioche dans ma DB, je l'ai rentré manuellement depuis le panneau d'admin de PhpMyAdmin :)
Messages postés
18362
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2020
4 128
Si tu ne réinscrits pas les données dans le bdd, elles seront toujours encodées dans l'ancien encodage, même si le champ et dans un autre encodage.
1. Mets tous tes champs en utf8_bin ou utf8_general_ci (le premier est sensible à la casse).
2. Réinscits toutes tes données en UTF-8
3. Précises bien entre <head> et </head> l'encodage (avec la balise meta)
4. Normalement, c'est bon

Bon à savoir :
Si tu veux inscires des données provenant d'une source en ISO-8859-1 (par exemple) sur une page en UTF-8, utiliser utf8_encode.
Si tu veux faire l'inverse, càd d'une source en UTF-8 vers une page en ISO-8859-1, utiliser utf8_decode.
UTF-8 → utf8_decode → ISO-8859-1
ISO-8859-1 → utf8_encode → UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Cette méta est là depuis le début. Je suis bel et bien en utf8_bin (si c'est sensible à la casse, alors mon code devra être plus propre ;) ) et mes données ont bel et bien été entrée plusieurs fois...

J'ai utilisé htmlentities() sur mes affichages et ça marche, donc je vais m'en contenter... génial ! -___-
Je crois que je vais me réécrire un print() qui traitera directement la chaine avec le htmlentities()
Messages postés
18362
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 janvier 2020
4 128
Tu prends la solution la plus simple ... mais pas la meilleur, d'après moi (même si "ça fonctionne").
Ah là je suis sûr c'est pas la meilleure... mais j'ai pas encore trouvé mieux :/