Petit problème sql

Salut à tous.
Voilà, je me suis mis dans la journée au PHP/SQL, et j’aimerais savoir le pourquoi d’une chose.
J’ai un endroit sur mon index.php qui affiche une blague aléatoirement, qu’il va prendre dans la db de mon .free.fr.
À cet endroit précis, alors que le charset est défini en tant qu’UTF-8 dans mon .php, dans la db, etc … Les accents et caractères spéciaux ne s’affichent pas ! Mais uniquement ceux qui viennent de la db, ceux du html s’affichent très bien.

J’avoue ne pas connaître grand chose à toutes ces choses là pour l’instant, mais je ne comprends pas du tout là :neutral_face: :neutral_face:

Donc si quelqu’un pouvait me dire pourquoi et comment faire pour résoudre… Ça m’aiderait beaucoup :smiley:

Bonjour,

Petite question “bête” :
Lorsque que tu as fait tes enregistrement c’était a la main (sql) ou via une page web ? (si c’est la page web était-elle en utf8 à ce moment la ?)
:arrow_right: Il te faut peut-être simplement ré-enregistrer tes infos de ta db en utf8.

Sinon, si tu as simplement modifié le charset de tes en-tête html, il faut ré-enregistrer tes pages au format utf8 (beaucoup d’étiteur propose de choisir le charset à l’enregistrement).
:arrow_right: m’étonnerai que ce soit ça vu que ton html s’affiche correctement mais on ne sait jamais :wink: )

Des fois c’est tout bête :neutral_face: :bulb:

Pourquoi se cassé la tête à le faire avec MySQL ? :unamused:
Fait le en javascript c’est beaucoup plus simple :smt002

Entre et :

<script type="text/javascript"> function BlagueAleatoire() { var HasarBlague=new Array(); HasarBlague[0]= 'Ta 1ere blague' HasarBlague[1]= 'Ta 2eme blague' HasarBlagueAll = Math.round(Math.random() * (HasarBlague.length-1)); document.write(HasarBlague[HasarBlagueAll]); } </script>

Pour afficher la blague aléatoire :

[quote=“Antostyle”]Pourquoi se cassé la tête à le faire avec MySQL ? :unamused:
Fait le en javascript c’est beaucoup plus simple :smt002
[/quote]
bah voyons :unamused:
A l’avenir, abstiens-toi d’écrire de telle idiotie !

ah bah en JS pour 2 blagues ça va … passé les 20 c’est déjà chiant à taper / à relire mais passé les 100 … on allourdit un chouilla le code :stuck_out_tongue:

La bdd free n’impose pas latin9 même si tu demandes utf8 ou un truc du genre ? sinon en plus du réglage php et de celui de mysql il ne faut pas oublier de tenir compte de celui d’apache (mais si tu n’as pas de pbs avec le texte ‘en dur’ dans ta page c’est peut être parceque le charset “BDD” n’est pas celui que tu penses. A quoi ressemble ton “create table” ? un desc sur ta table ? show create table ta_table ( me souviens pas de la syntaxe exacte mais si tu creuses avec show tu auras plus d’infos qu’un simple desc). Ceci dit, free ne doit toujours pas proposer un accès terminl aux bdds des espaces persos mais tu dois pouvoir rentrer tout ça en direct via phpmyadmin (la ptite icone “sql” dans la colonne de gauche).
Je ne sais pas si l’encodage “en sortie de champ de formulaire quand on le soumet” compte mais il est probablement le même que celui décidé pour toute la page (sinon ça doit vite devenir le boxon m’est avis) …

Si tu as besoin de “dépister” d’ou vient ton pb d’encodage, commence par regarder ce que te renvoie un select dans ta base, histoire d’essayer de voir si les caractères sont déjà pourris en sortie de base avant même l’affichage, ou si c’est la page qui pose pb.
Dans le doute, tu peux toujours utiliser une fonction de PHP pour réencoder ta chaine de caractères avant de la rentrer en base / la décoder en sortie (pour utf8 : http://www.php.net/manual/fr/function.utf8-encode.php, et il doit en exister pour d’autres encodages) mais bon c’est un peu le marteau pour écraser le moucheron. Ne pars dans les histoires de réencodage que si tu es certain que tout le reste de la chaîne d’affichage est bon (apache / php / mysql fonctionnant avec scrupuleusement le même encodage, entre autres, ou une autre idée se manifestant ici). Inutile de sortir le bazooka à réencoder si cela peut être évité, c’est du calcul en moins (dans ton cas c’est certes minime mais ce sont les petits ruisseaux qui font les grandes rivières ^^)

Ah et sinon tant que possible : éviter de mettre le js en direct dans le code de la page et préférer l’inclusion … question de lisibilité, il y a, de plus, des frameworks JS qui fonctionnent très bien et comportent un certain nombre de garde-fous (JQuery par exemple) qui sont très bien =)

Après, l’idée d’antostyle peut être sympa si peu de blagues et toujours les mêmes, mais je pense que si tu as envisagé la bdd c’est que tu songes à en avoir beaucoup, pouvoir en rentrer des nouvelles / éditer les existantes ? ^^

bump (je me pose les mêmes questions au boulot donc j’aimerais bien en connaître le fin mot :stuck_out_tongue:).

Ce dont on s’est rendu compte de mon côté c’est que comme toutes les parties “mentent” et pensent faire qqch d’intelligent avec l’encodage, dès qu’on commence à mettre ensemble des éléments qui proviennent d’endroits différents l’encodage ‘final’ en prend un coup (nous c’est parceque PERL, Apache ou MySQL veulent être malins mais chacun de son côté), et on n’a pas encore trouvé de solution satisfaisante.

Le cas typique ou on a des pbs c’est quand on remonte des infos de la base et cherche a les concaténer avec des trucs d’autre provenance (typiquement des données venant d’un formulaire + un bout de template html). Faut encore qu’on isole le cas précis ou ça se produit par contre. Si j’ai plus d’infos je posterais la solution à la suite de ce fil =)

il faudrait que tu nous donne ce que tu espere voir est ce que tu as reellement pour bien te dire mais sinon essaye avec
htmlentities et utf8decode