PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 18-04-2010 08:38:56

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

PHP/Mysql et encodage

Bonjour à tous,

Etant quelqu'un aimant bien comprendre le fond des choses, je lance le débat sur un problème que j'ai résolu mais dont j'ignore encore la raison. Peut être quelqu'un en connaitra la réponse.
Pour information, j'encode tout en unicode utf-8 pour des raisons de compatibilité et de facilité de gestion de code lors de globalisation de solutions.
Donc tout est encodé en utf-8 : DB et tables mySQL, et tous mes fichiers html,php et js sont enregistrés comme fichiers utf-8.

Mon incompréhension viens du fait que lorsque je récupère un champ texte mySQL (varchar,mediumtext,etc...) - dont le contenu est donc encodé et enregistré en utf-8 - dans une fonction php, je sois obligé pour avoir une sortie correcte, de réencoder en utf-8 ma variable comme suit :

while ($row=mysql_fetch_row($result)){
  $r_id=$row[0];
  $r_notes = utf8_encode($row[1]);
}
...

print $r_notes;

vu que tout mon espace de travail est utf8 normalement, il ne peut y a avoir de conversion implicite lors du chargement du champ $r_notes dans un autre format, ce qui m'oblige à réencoder la variable, mais j'ai visiblement tord, car je suis obligé de le faire quand même. Donc si quelqu'un à le pourquoi.. je suis preneur smile

Merci


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#2 18-04-2010 09:26:28

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : PHP/Mysql et encodage

Tu as un champs du php.ini définissant l'encodage, de base il est sur ISO-machintruchouette.
Donc même avec des fichiers et mysql en UTF-8 si apache ne l'est pas cela expliquerait ton problème.

Edit : Voici le paramètre de base
default_charset = "iso-8859-1"

Dernière modification par xTG (18-04-2010 09:32:20)

Hors ligne

#3 18-04-2010 09:44:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : PHP/Mysql et encodage

J'oubliais aussi de préciser que dans chaque .htaccess de la racine de mes sites j'ai ajouté la définition suivante
AddDefaultCharset UTF-8

.htaccess etant un fichier config apache c'est pris en compte par apache. A moins qu'il me faille déclarer un .htaccess dans le répertoire d'execution de mon fichier php, mais normalement suffit de l'avoir dans la racine. Donc je donne ma langue au chat...

Mais tu as peut etre raison xTG dans le sens ou le problème ne viens pas d'apache vu ce que je viens d'ecrire mais bien au niveau du php.ini qui lui ne prends pas en compte la definition .htaccess.
Je vérifie tout ca. Merci beaucoup xTG wink

Dernière modification par Jc (18-04-2010 10:18:00)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#4 18-04-2010 11:36:39

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : PHP/Mysql et encodage

Bon ben c'est bien ca, finalement restait plus que ça en même temps^^
Je reste dans ce cas de figure et j'attends patiemment PHP6 pour etre en utf8 par défaut car il faut savoir les choses suivantes après étude :
Mon defaut charset est ="" dans php.ini (donc ISO). Mais le truc si la variable n'est pas vide c'est que php envoi systématiquement l'encodage à la page de sortie via header() en implicite, ce qui peut géner considérablement la gestion du code dans un contexte de sessions. Donc je prefere réencoder par un simple utf8_encode mes champs texte récupérés dans mySQL pour le moment.

Je passe l'info car elle est importante à souligner et merci à xTG, on a pas toujours le recul sur tout notre code^^


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums