Vous n'êtes pas identifié. Veuillez vous connecter ou vous inscrire.


Ecrire une réponse

Ecrire une réponse

Composez et envoyez votre nouvelle réponse

Vous pouvez utiliser : BBCode Images Binettes

Les champs marqués %s doivent être remplis avant d'envoyer ce formulaire.

Information obligatoire pour les invités


Information obligatoire

Revue du sujet (plus récents en tête)

11

@Nardo26

Tu m'as sauvé la vie !

10

Oui c'est bien mon souci, on verra dans le temps, quand les gens seront connectés à plus d'1 serveur MySQL, dans ce cas le proxy MySQL pourra surement faire automatiquement le changement.

9

Bonsoir Toad,

A mon avis, il ne faut surtout pas toucher au SET NAME...

Car cela ne nous coute rien de rajouter une petite ligne pour les futurs développement...
(il faut juste noter cette histoire de utf8 dans un coin, c'est piégeux...) alors que pour les sites déjà existants, cela risque de générer un sacré merdi... et une foule de post de gens qui hurleront que leurs sites ne fonctionnent plus correctement. wink

... maintenant, ce que j'en pense...  wink

8

Bonsoir,

Oui effectivement je ne le précise nulle part mais pour des raisons historiques, je force le SET NAMES d'init de MySQL vers l'iso-8859-1.
Il faudra que je change cela vers de l'UTF-8 dans le futur mais comment régler ce problème sans gêner les sites existants..

7

Bonjour,

Eurêka !! j'ai trouvé la solution :

Il ne suffit pas d'encoder la page html en UTF8 et de configurer la base de la même manière, il faut également préciser dans quel type d'encodage les requêtes doivent être effectuées.
En fait les connexions MySQL sont en ISO-8859-1 par défaut, et si les données sont marquées comme étant en UTF-8 alors MySQL va réaliser une conversion, corrompant ainsi les données...

Que ce soit en lecture ou en écriture, il faut donc rajouter ceci juste après la sélection de la base :
mysql_query("SET NAMES 'utf8'",$connection);

voir ceci:
http://forum.alsacreations.com/topic-17 … UTF-8.html

6

Bonsoir Nico,

J'ai vérifié, tout me semble ok : le 'character set database' est bien en utf8

http://nardo26.lescigales.org/img/Capture3.PNG

Bizarre, vous avez dis bizarre ? comme c'est bizarre !... big_smile

5

Je pense que phpmyadmin n'est pas réglé sur UTF8 il doit sûrement encoder autrement ce qui provoque ce "bug"
Essai de voir en changeant via le navigateur l'encodage

4

Bonsoir,

Un peu plus de détails smile

Après quelques essais j'ai trouvé une solution :

    $connection = mysql_connect($host, $user, $password);  // connexion a mySQL
    $db         = mysql_select_db($database, $connection); // selection de la base de donnee
    $rubrique=$_POST['rubrique'];
    $date = date('Y/m/d H:i');
    // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $auteur_form= mysql_real_escape_string(htmlspecialchars($_POST['auteur_form']));
    $email_form= mysql_real_escape_string(htmlspecialchars($_POST['email_form']));
    // Le texte du commentaire est déjà passé pas htmlspecialchar
    $texte_form = $_POST['texte_form'];
    $table_entity=array("é","è","ç","ù","Ç","É","â","ê","ï","ë");
    $table_accent=array("é","è","ç","ù","Ç","É","â","ê","ï","ë");
    $texte_form=str_replace($table_entity,$table_accent,$texte_form);
    // On peut enfin enregistrer :o)
       $sql  = mysql_query('INSERT INTO '.$table.' (rubrique, auteur, email, texte, date) VALUES (\''.$rubrique.'\', \''.$auteur_form.'\', \''.$email_form.'\', \''.$texte_form.'\', \''.$date.'\')', $connection);

Dans ma page html cela fonctionne correctement :
http://nardo26.lescigales.org/img/Capture2.PNG
j'en ai profité pour vérifier si l'inclusion de balises est bien filtrée dans le champ de saisie wink


si je visualise le code à partir du navigateur j'ai:

<div class="message_body"><p>ceci est un test sur les &lt;b&gt;caractères accentués&lt;/b&gt;<br />fin du test !</p></div>

-> les accents sont ok !

Par contre dans ma base SQL j'ai ceci :
http://nardo26.lescigales.org/img/Capture.PNG

Quelqu'un pourrai m'expliquer pourquoi les caractères accentués ne s'affichent pas correctement dans la base ?
Je sais bien que les caractères sont codés sur 2 octets en UTF8 mais la page de mySQL est dans ce format donc ?... si non,  pourquoi seulement les accents et pas le reste du texte ?...

3

Merci Nico,

Je comprend plus rien du tout !!!

Je viens de faire plusieurs essais avec la chaîne "caractères" :

Ce que je récupère dans $_POST :   caract&egrave;re
Si je conserve les html_entity, cela va me remplir la base de caractères inutiles (alors qu'elle est elle-même en UTF-8.

Donc avant la requête INSERT, j'ai rajouté ceci pour me retrouver avec une chaine codée en UTF-8 (sans les html_entity,  c'est franchement plus lisible wink ...)

$texte_form = $_POST['texte_form'];
$texte_form = html_entity_decode($texte_form,ENT_NOQUOTES,"UTF-8");

A ce stade, la chaîne est correctement affichée dans le navigateur. Par contre, si je regarde dans mySQL, je me retrouve avec ceci : Caractères

???? bizarre non ?

J'ai l'impression que lorsqu'un champ dans une base est crée, on ne peut plus changer son type d'encodage... c'est l'impression que cela donne...
Je me trompe ?

2

Bonjour
Tu peux le faire avec

echo htmlentities($valeur, ENT_QUOTES, "UTF-8");

$valeur == a remplacer par ce que tu récupères dans ta base de données

1

Bonsoir,
Je ne sais pas trop où poster mon problème:  je soupçonne un problème au niveau de ma base SQL...

Petit topo :
Je viens de passer l'ensemble de mon site en UTF-8. Je ne rencontre pas de problème d'accents dans le contenu de mes pages. Sur chaque page, je donne la possibilité de laisser des commentaires.
Lorsque je crée un nouveau commentaire, les accents sont bien gérés. l'affichage est ok.
Par contre, je constate que sur les anciens messages les caractères sont remplacés par des accents...
Lorsque je regarde le contenu dans mySQL, les accents sont pourtant bien présents.

Lors du passage en UTF-8, j'avais le champs de commentaire (de type TEXT) qui était en latin1_general_ci, j'ai édité (à partir de l'onglet 'structure') mon champs en le faisant passer en utf8_general_ci. Ai-je bien fait ? il y a t-il une manip que j'aurais loupé ?

Merci de vos réponses ! smile

[Edit]

J'ai constaté que maintenant lorsque je poste un nouveau message dans mes pages, les accents sont remplacés par exemple par &eacute, &agrave, etc...
Comme je ne maîtrise pas vraiment SQL, Existe-t-il un moyen (une requête) pour remplacer dans la base tout les accents par leurs versions "html" ou dois-je me coltiner toutes les modifs à la main ? sad

[/Edit]



Currently used extensions: pun_poll, pun_admin_manage_extensions_improved. Copyright © 2008 PunBB