Bizarrerie non comprise PHP Mysql UTF8

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
Amiral59

Bizarrerie non comprise PHP Mysql UTF8

Message par Amiral59 »

Bonjour à toutes et tous,

Un truc bizarre que je ne comprends pas...

J'ai une base sous Mysql avec tous les interclassements en UTF8 (base, table, champs)...

Je viens de créer un simple script :

Code : Tout sélectionner

<?php
  header("Content-type: text/html; charset=utf-8");
  $L_db = mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASS);
  mysql_select_db(MYSQL_DBNOM, $L_db);
  mysql_query("SET NAMES 'utf8'");
	
  echo "Caractères : ".mysql_client_encoding();
  echo "<br />";

  mysql_close();
?>
Le but étant comme vous l'aurez compris juste de renvoyer le type de caractère... et surprise, j'obtiens un beau latin1...

Et là je ne comprends pas pourquoi... si quelqu'un pouvait juste éclairer ma lanterne...

Merci par avance

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

As-tu essayé avec l'extension mysqli ?
Et sinon, est-ce que les chaines sont vraiment retournées en latin1 ? Ou bien c'est juste l'indication qui est erronnée ?
Quelle version de MySQL ?

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Amiral59

Message par Amiral59 »

Alors pour mysql : 5.0.32

Pour les chaines renvoyés : ben si je ramène n'importe quelle chaine accentuée, j'ai bien les accents qui s'affichent normalement (je n'opère aucune modification sur la chaine qui ressort de la base pour ce test)...

C'est encore plus bizarre...

Moi je voulais utiliser justement mysql_client_encoding() pour tester justement si je dois faire des traitements ou pas (en fonction des serveurs où seront installés les scripts)

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Amiral59

Message par Amiral59 »

Mon script pour ramener un exemple de texte avec accents :

Code : Tout sélectionner

<?php
  header("Content-type: text/html; charset=utf-8");
  $L_db = mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASS);
  mysql_select_db(MYSQL_DBNOM, $L_db);
  mysql_query("SET NAMES 'utf8'");
  
  echo "Caractères : ".mysql_client_encoding();
  echo "<br>";
  
  $result = mysql_query("SELECT * FROM test_post WHERE idauto_tp=727");
 
  while($val=mysql_fetch_array($result)) {
    echo $val["message_tp"];
  }
  
  echo "<br />";

  mysql_close();
Et j'ai en résultat :

Code : Tout sélectionner

Caractères : latin1
Bonjour, je m'appelle Péhépé le testeur fou à l'épée et à la cacahouète
(ce qui correspond exactement à ce que j'ai dans la base)

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Amiral59

Message par Amiral59 »

Petit up en ce jour férié :wink:

Si des gens peuvent me dire que c'est normal... ou me donner une idée...

Pour information l'hébergeur sur qui j'ai testé c'est Planet-Work...

Merci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Amiral59 a écrit :Alors pour mysql : 5.0.32

Pour les chaines renvoyés : ben si je ramène n'importe quelle chaine accentuée, j'ai bien les accents qui s'affichent normalement (je n'opère aucune modification sur la chaine qui ressort de la base pour ce test)...
Et en quel encodage tu affiches ça ? 8-bits ou unicode ?

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firegecko Firefox/2.0.0.3 (Ubuntu-feisty)
Amiral59

Message par Amiral59 »

Euh... question colle...

J'utilise Mozilla Firefox qui me détecte bien l'encodage UTF-8, après je ne sais pas comment de répondre plus avant, si tu peux m'aiguiller :roll:

Je ne spécifie rien d'autres que le bout de script ci-dessus (c'est une page test exprès que j'ai créé)

Désolé de ne pouvoir éclairer plus, je ne suis pas trop spécialisé après, d'où mon problème initial de compréhension entre mes paramétrages et ce que me ressort la fonction...

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Amiral59 a écrit :Euh... question colle...

J'utilise Mozilla Firefox qui me détecte bien l'encodage UTF-8, après je ne sais pas comment de répondre plus avant, si tu peux m'aiguiller :roll:
Dans les "Informations sur la page" ?
Alors c'est que les données sont effectivement en utf-8. Malheureusement je n'en sais pas plus :oops:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Fraisouille63

Message par Fraisouille63 »

J'ai eu le même problème que toi et je l'ai résolu en appelant la requête "SET NAMES 'utf8'" avant chaque autre requête

La fonction mysql_client_encoding() retourne toujours latin1 mais mes infos (en grec) sont correctement codées en base, et pas sous la forme "ጄΜΞρωποι"

J'espère que cela pourra t'aider !

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Amiral59

Message par Amiral59 »

Ok, cela je le faisais déjà... (voir exemple ci-dessus)

Mais il faut avouer que c'est étrange quand même... malgré l'ensemble des paramètrages sur UTF8 on obtient bizarrement un latin1 :roll:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

J'ai le droit de casser du sucre sur le dos de MySQL ? :P

Je pense que c'est certainement un choix de leur part : ils estiment que tu n'as pas besoin de t'occuper des encodages et que la base de données doit gérer ça elle-même comme une grande. Et comme ce serait trop lourd s'il y avait plusieurs sortie, et comme l'utf-8 prend plus de place que le latin-1 pour les caractères accentués, il faut absolument optimiser tout ça et ne sortir que du latin-1 !

Bon ok, je sors, mais je n'en pense pas moins de MySQL... :?

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox Firefox/2.0.0.3 (Ubuntu-feisty)
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités