Interprètation de caractères accentués
J'ai un drôle de soucis.
J'ai une base MySQL (Version du serveur: 5.0.51a-3ubuntu5.1). Dans cette base, je cherche a exploiter deux tables à travers la requete suivante :
$requeteLivres = "SELECT mouvements.Cid AS \"Ref.DNA\", mouvements.DateEmprunt AS \"Emprunté le\", mouvements.DateRestitution AS \"Restitué le\", livres.Auteur, livres.Titre FROM mouvements INNER JOIN livres ON mouvements.Cid=livres.RefDNA WHERE mouvements.CodeCategorie=\"LIVRES\" AND mouvements.Personne=".$indexeEmprunteur." AND DateRestitution IS NOT NULL ORDER BY DateEmprunt DESC";
Mes deux tables sont définies sur mon serveur avec l'interclassement utf8_unicode_ci. Lorsque je construit le résultat dans la suite de mon code php sous la forme d'un balisage HTML de tableau, ce dernier s'affiche correctement, son contenu aussi à un détail prèt, les caractères accentués ne sont pas interprètés ?! Dans IE ils sont remplacés par un carré blanc, et sous Firefox par un losange noir contenant un point d'interrogation blanc.
Par contre, si j'éffectue une requete plus simple sur la table des livres, genre :
SELECT * FROM livres, et que je construit de la même manière mon tableau HTML, les accents sont là ?!...........
Y aurait-il une influence dans l'interprètation des caractères accentués lorsque l'on utilise les jointures ?
Une solution, mais pas d'explications...
A force de parler de mon problèmes à différents collègues au boulot, j'ai été mis sur une piste particulière. En fait, mon cas est un peu particulier dans le sens ou je développe sous windows des choses que j'execute ensuite sur une machine unix. Quel rapport me direz-vous ? Et bien, l'encodage des caractères dans les fichiers ascii.
C'est dépendant de l'OS, et ça a apparament toujours été un problèmes de type casse-tête à gérer.
En clair, j'écris mes fichiers php avec mon bon vieux Notepad, et ensuite, je les copie via ftp sur mon serveur Linux Ubuntu. Et parfois, à l'occasion d'une petite correction, pour ne pas refaire tout le cycle, je lance mon VNC et je prends la main sur mon serveur ou j'édite mon fichier php avec GEdit de gnome. Et c'est là que ça couac...
Notepad sous windows enregistre par défaut les fichiers ascii avec un encodage ANSI, alors que les machines Linux encode en UTF-8 par défaut.
Moralité, je me suis vite retrouvé avec un fichier un coup encodé ANSI, un coup UTF-8, bref, pas bon.
Alors, j'ai décidé de ré-écrire intégralement mon fichier php avec GEdit directement sur le serveur, et là, surprise, mes accents sont là... mais pas tous !
En effet, dans le texte qui habille mon tableau et récapitule quelques infos les accents sont maintenant parfait, mais toujours pas dans le résultat de la requete présentée sous la forme d'un tableau.
Alors j'ai continué à chercher dans les fonctions php concernant les chaînes, et je suis tombé sur la fonction htmlentities(String).
C'est magique, dans les lignes echo de mon code où j'écris $valeur, j'ai mis htmlentities($valeur), et là, miracle, les accents sont là, en minuscule comme en majuscule.
Bref, ça marche, mais je comprends toujours pas pourquoi dans le cas de la requete simple je n'ai pas besoin de faire de htmlentities, alors que dans le cas d'une requete qui concerne deux tables, j'y suis obligé ?!....
Sinon, merci à vous nimbus 77, je vais voir si je peux me passer de ce fameux htmlentities en modifiant la structure de ma table et opter pour un champ TEXT au lieu d'un VarChar. Merci à vous.