Aller au contenu

SQL et utf-8


Gibou

Sujets conseillés

Bnojour,

Je me heurte à un problème d'encodage dont je ne trouve pas la solution (oui, certes, sinon, je ne posterais pas ce topic).

Mes données sont stockées en utf-8 dans les champs mais lorsque j'affiche, tous les caractères spéciaux s'affichent nickel SAUF le 'à'.

Je pense que celà vient du fait que ce caractère "s'écrit" "à " en utf-8. Le à suivi d'un espace. Or, lorsque j'affiche, le parser utf-8 ne doit pas comprendre qu'il faut prendre en compte l'espace qui suit et donc me met un joli point d'interrogation sur fond noir.

Voilà comment est ma table :



CREATE TABLE `convois` (
`Id` int(11) NOT NULL auto_increment,
`Pays` varchar(10) character set latin1 NOT NULL,
`Descr` text character set latin1 NOT NULL,
`Web` varchar(100) character set latin1 NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

--
-- Contenu de la table `convois`
--

INSERT INTO `convois` VALUES (2, 'Madagascar', '5 étudiants de 2 Úme et de 3 Úme année constituent le convoi Madagascar. AprÚs avoir entendu les témoignages des convois partis l''an passé, cette équipe a voulu s''impliquer dans cette expérience humanitaire. Ce convoi possÚde un atout principal : deux membres sont malgaches. Ils connaissent bien la situation sur le terrain et se sentent concernés (l''un d''eux a déjà participé à des projets humanitaires à Madagascar). Il leur tient à coeur de concrétiser ce projet pour ainsi être utile à leur pays.\r\nVille de destination : Manakara. Etablissements visés : école Petit Poucet, collÚge Luthérien et CEG Manakara.', 'http://eahmadagascar.free.fr/');
INSERT INTO `convois` VALUES (3, 'Liban', 'Comme chacun l''imagine, la situation actuelle au Liban n''est pas des plus favorables à l''installation de réseaux informatiques. Ce groupe de 5 Efreiens a donc dû revoir ses objectifs. Ils collectent pour le moment, entre autres, des médicaments et fournitures scolaires pour venir en aide à cette population sinistrée. Le devenir de leur action dépend dorénavant de l''évolution de la situation sur place.\r\nCe groupe fait des efforts pour sensibiliser la population Libanaise Parisienne à leur projet en effectuant par exemple des expositions et collectes de fonds dans des restaurants Libanais.', 'http://liban2007.free.fr/');
INSERT INTO `convois` VALUES (4, 'Bénin', 'Le convoi Bénin 2007 est composé de 6 membres et a pour objectif d''équiper 2 collÚges à Cotonou et Porto Novo. Le Bénin a été le premier pays à bénéficier de l''action d''EAH, il y aura donc bien sur une mission de maintenance importante dans les différents établissements équipés précédemment. De plus, les centres Wedus situés au Bénin sont des plus actifs et le Ministre de l''éducation Béninois a lui même reconnu l''an dernier les bienfaits de Wedus et de l''informatique pour l''éducation des enfants.', 'http://benin2007.free.fr/');
INSERT INTO `convois` VALUES (5, 'Maroc', 'Le convoi Maroc est constitué de 5 étudiants. Ils comptent équiper deux établissements proches de la ville de Tafraoute, dans le Sud Marocain : Le collÚge de Tafraout et le lycée Targhit.\r\n\r\nUn projet commun avec l''association VRally 4L est en cours de discussion (acheminement et installation du matériel en 4L puis formation sur place par l''équipe du convoi).', '');
INSERT INTO `convois` VALUES (6, 'Cameroun', '', '');

l'interclassement utilisé est utf-8_unicode_ci

Merci de votre aide et j'espère avoir posté au bon endroit :)

PS : Je précise que celà m'arrive uniquement en ligne et non en local. Je travaille sous WampServer5 1.7.2 et le site en ligne est hébergé chez free

Pour une visualisation du problème : http://nico.gibelin.free.fr/burkina/index....&id=convois

Lien vers le commentaire
Partager sur d’autres sites

J'ai fini par résoudre ce problème par un gros "foutage de tronche", pardonnez moi l'expression.

J'aurais pas cru que ça marcherait mais en prenant mon texte, en l'encodant en iso-8859-1 puis en le réencodant en utf-8, là, tout marche nickel ...

en gros :


$txt = utf8_encode(utf8_decode($data['txt']));
et
$txt = $data['txt'];

devraient donner le même résultat ... eh bien non. J'aime, j'aime, je suis fan :)

Bonne journée !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Avant de récupérer les données faites toujours ce query:

SET CHARACTER SET utf8

et puis votre SELECT en SQL...

et affichez les données. J'imagine que votre page utilise le charset UTF-8 donc vous pouvez faire simplement comme ceci:

echo htmlspecialchars($texte);

Lorsque vous enregistrez des données dans la DB au départ d'une page il faut aussi utiliser SET CHARACTER SET utf8.

Il vaut mieux que le charset soit identique pour la DB et pour les pages HTML, sinon pb de conversion (perso je préfère avoir UTF-8 de deux côtés)

Référence: http://dev.mysql.com/doc/refman/5.0/en/cha...connection.html

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...