Page 1 sur 1
Bizarrerie non comprise PHP Mysql UTF8
Publié : 16 mai 2007, 12:20
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
Publié : 16 mai 2007, 12:41
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
Publié : 16 mai 2007, 13:18
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
Publié : 16 mai 2007, 13:21
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
Publié : 17 mai 2007, 17:58
par Amiral59
Petit up en ce jour férié
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
Publié : 17 mai 2007, 19:25
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)
Publié : 18 mai 2007, 15:19
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
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
Publié : 18 mai 2007, 15:54
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
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
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
Publié : 22 mai 2007, 23:31
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
Publié : 26 mai 2007, 10:43
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
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
Publié : 27 mai 2007, 10:45
par calimo
J'ai le droit de casser du sucre sur le dos de MySQL ?
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)