JoP Posté 2 Août 2010 Posté 2 Août 2010 Bonjour à tous, Je travaille avec une base de données MySQL et j'ai un problème au niveau des accents. Dans ma bse de données, les accents ne s'enregistrent pas comme il faut. Par exemple, "à" devient "Ã". Le classement de ma base de données est utf8_general_ci.. et je ne sais pas trop comment régler ce problème. Est-ce que je dois modifier le classement de ma base de données ou bien je dois utiliser une fonction PHP qui me permettra de modifier mes caractères spéciaux (exemple "à" -> "à") et une autre fonction pour les remodifier (pour créer un RSS, qui ne supporte pas "à") par la suite. Merci à tous! Jonathan P.
Yavuz Posté 2 Août 2010 Posté 2 Août 2010 Formate tes caractères avant l'insertion c'est toujours mieux.
Dadou Posté 2 Août 2010 Posté 2 Août 2010 Pas forcement, souvent la requête SET NAMES 'utf8' suffit amplement
JoP Posté 2 Août 2010 Auteur Posté 2 Août 2010 Pas forcement, souvent la requête SET NAMES 'utf8' suffit amplement Merci, mais où est-ce que je dois placer cette requête?
Dadou Posté 2 Août 2010 Posté 2 Août 2010 Juste après la connexion $conn = mysql_connect("localhost", "username", "password") or die(sendError('Could not connect to DB'));mysql_select_db("dbName");mysql_query("SET NAMES 'utf8'", $conn);
JoP Posté 2 Août 2010 Auteur Posté 2 Août 2010 Merci beaucoup, j'ai revérifier quelques trucs, et j'ai aussi utilisé cette requête et tout fonctionne à merveille! Merci à vous!
petit-ourson Posté 2 Août 2010 Posté 2 Août 2010 En tout cas, il ne faut surtout pas stocker les accents en entités html dans sa base de données. C'est trop galère après si tu dois utiliser ta base de données dans autre chose que ton site web.
Ernestine Posté 2 Août 2010 Posté 2 Août 2010 (modifié) Tu les stockes tels quels, sans aucune transformation. Par exemple un à, tu le stockes à (et surtout pas à) Modifié 2 Août 2010 par Ernestine
JoP Posté 2 Août 2010 Auteur Posté 2 Août 2010 C'est tout justement le sujet de mon post, lorsque je stocke un à, dans la base de données, j'ai un à Est-ce que je dois changer l'interclassement de ma base pour que ça fonctionne?? Et si oui, que dois-je mettre? Merci
JoP Posté 2 Août 2010 Auteur Posté 2 Août 2010 Je croyais que c'etais bon?? Oui, mais j'aime bien m'informer sur le sujet quand même, pour voir les options...
Yavuz Posté 2 Août 2010 Posté 2 Août 2010 Ernestine, il est quand même rare (ne vaut pas dire jamais) d'utiliser la bdd d'un site sur autre chose que le site web.
Ernestine Posté 2 Août 2010 Posté 2 Août 2010 (modifié) Ernestine, il est quand même rare (ne vaut pas dire jamais) d'utiliser la bdd d'un site sur autre chose que le site web. C'est surtout une question de partage des rôles. La base de données constitue la couche la plus basse d'une application web, tandis que le rendu final à l'écran sera produit par les fonctions d'affichage, la couche la plus haute. C'est au moment de l'affichage qu'il faut s'occuper des entités html, et certainement pas au moment du stockage. Mysql est là pour stocker les données, les organiser, assurer l'intégrité référentielle, etc, et tout cela indépendamment de l'utilisation qui sera faite de ces données. Et si demain on lui demande de générer un fichier excel à partir des données de sa base, il fait comment ? Il s'amuse à les décoder ? Modifié 2 Août 2010 par Ernestine
Yavuz Posté 2 Août 2010 Posté 2 Août 2010 Je procède aussi de la façon que tu a cité précédemment pour éviter toute complication. C'est vrai qu'il n'est pas si rare que cela en faite
SStephane Posté 3 Août 2010 Posté 3 Août 2010 Formate tes caractères avant l'insertion c'est toujours mieux. Surtout pas ! Ernestine, petit-ourson et ceux qui vont dans leur sens sont dans le vrai. Je m'étend pas sur le sujet, c'est un fait : on ne stocke pas des entités html dans une base, les raisons sont multiples (export, migration ou tout simplement...logique). Si ta base stocke des caractères foireux lors de l'enregistrement de ton formulaire, c'est simplement parce que ta page n'utilise pas le même encodage, ainsi ta requête http transmet des données encodées différement. Un attribut html de la balise form existe pour résoudre ce souci (je l'ai jamais utilisé, mais je gage que ça fonctionne : accept-charset http://www.w3.org/TR/html401/interact/forms.html#adef-accept-charset ) C'est une spec, donc elle devrait être implémentée par une majorité de navigateur pour palier à ton problème d'insertion. Le mieux étant d'utiliser le même encodage pour ta base et tes pages dans l'absolu (raison pour laquelle je n'ai jamais eu à utiliser ce tag). Bonne chance PS, pour info : ces chaines "é", "î", "Ã" etc. sont affichées lorsque les caractères sont en utf8 et qu'elles sont interprétées comme de l'iso.
Dadou Posté 3 Août 2010 Posté 3 Août 2010 SStephane, tu as mal interprété leurs propos, c'était de formater les textes en UTF8 qui était proposé la, mais le problème de stockage dans la bdd avec des caractères bizarre, c'est souvent parce que le serveur Mysql est par défaut en latin-1, et même si tu crée tes bases en UTF8 il exécute les requêtes en latin-1 et pour palier a cela la requettes set name for e l'exécution en UTF8 rien a voir avec un attribut html qui ne sert a rien si la page est déjà encodemé en utf8
JoP Posté 3 Août 2010 Auteur Posté 3 Août 2010 Donc, si je comprends bien, je devrais revérifier l'interclassement de ma base de données et de toutes mes tables pour vérifier qu'il soit bien le même?? Je crois que utf8 est un interclassement qui supporte pas mal tous les caractères; est-ce bien ça? Merci encore à tous!
Dadou Posté 3 Août 2010 Posté 3 Août 2010 Tu peux vérifier ce n'est pas perdu. Tu as l'interclassement du serveur, mais souvent, celui la tu ne peux y toucher, surtout sur les mutualisés, puis l'interclassement sur les bases, puis sur les tables et enfin sur les champs de type texte,
Leonick Posté 7 Août 2010 Posté 7 Août 2010 Et ne pas oublier que si tu fais une recherche plein texte dans ta BDD, avec les entités tu risques de ne pas tout retrouver. Par exemple tu recherches "coûté" alors que dans la base c'est écrit coûté
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant