Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 16/03/2010, 11h07   #1
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 052
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 052
Points : 16 359
Points : 16 359
Envoyer un message via MSN à CinePhil
Par défaut Le bon choix de charset entre php et MySQL ?

Bonjour,

Je me trouve confronté comme beaucoup au problème des lettres accentuées entre PHP et MySQL.

Quel est le bon choix à faire pour que tout ça fonctionne correctement en français ?

Actuellement :
- Interclassement pour la connexion MySQL = utf8_general_ci
- Interclassement pour els tables de la BDD = utf8_general_ci
- Default_charset dans php.ini = UTF-8
- Enregistrement des fichiers de code par Eclipse = UTF-8

J'avais cependant commencé à enregistrer des données dans une table qui était dans un autre interclassement (je ne sais plus lequel). J'ai modifié les données avec accent après avoir changé l'interclassement des tables mais j'ai toujours les lettres accentuées des données issues de cette table qui apparraissent sous la forme d'un point d'interrogation dans un losange noir dans la liste déroulante de ma page générée par PHP. Pourtant, d'une part ces données s'affichent correctement dans PHPMyAdmin et d'autres données accentuées enregistrées via un formulaire PHP de la même appli s'affichent correctement dans la page mais incorrectement dans phpMyAdmin !

Bref, comme beaucoup, je galère avec ces lettres accentuées !

De plus, je viens de découvrir ici que UTF8-general_ci n'est pas sensible à la casse ('ci' dans le nom = case insensitive ?), ce que je trouve dommage.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !

Dernière modification par sabotage ; 16/03/2010 à 11h16. Motif: gros mot
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 11h21   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
UTF8_general_ci est l'interclassement, c'est à dire la régle utilisée par la comparaison et le classement des données ; tu peux le changer comme tu le souhaites.

Ce qu'il peut te manquer c'est la l'encodage utilisé par mysql pour communiquer avec PHP :
http://php.developpez.com/faq/?page=mysql#mysql-utf-8
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 11h34   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 052
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 052
Points : 16 359
Points : 16 359
Envoyer un message via MSN à CinePhil
J'ai bien utf8 dans les pages générées :
Code HTML :
1
2
3
4
5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

Dans la FAQ, je lis ceci :
Citation:
Mais ce n'est pas tout. Il faut également spécifier dans vos scripts PHP que les données récuperées ou transmises doivent être en UTF-8. La fonction magique pour ceci est : mysql_query("SET NAMES 'utf8'");



Elle est à insérer juste après la connexion à la base établie, donc juste après avoir fait un
mysql_connect($dbhost, $dblogin, $dbpass);


J'utilise Zend_Framework.
Ca se passe où ce genre de chose ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 12h30   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 052
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 052
Points : 16 359
Points : 16 359
Envoyer un message via MSN à CinePhil
J'ai partiellement résolu le problème...

Comme les tables avaient été créées au départ en utf8_unicode_ci, les colonnes déjà alimentées étaient restées dans cet interclassement.
J'ai modifié tout ça.

Ensuite j'ai ajouté AddDefaultCharset utf-8 dans httpd.conf.

J'ai aussi ajouté dans le fichier config.ini de mon appli Zend_Framework ceci :
Code :
db.params.charset = UTF8
Jusque là, rien de changé dans l'affichage !

Après d'autres recherches, j'ai ajouté ces commandes dans mon controleur qui appelle la vue :
Code :
1
2
$this->view->setEscape('utf8_encode');
$this->view->setEncoding('utf-8');
Et là, miracle ! Les données accentuées s'affichent correctement...

Mais les libellés accentués qui auparavant s'affichaient correctement sont maintenant mal affichés !

Je ne sais plus trop quoi faire !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 12h52   #5
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 242
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 242
Points : 2 597
Points : 2 597
Citation:
Mais les libellés accentués qui auparavant s'affichaient correctement sont maintenant mal affichés !
Je ne connais pas ZFW, donc c'est une idée comme ça, mais ce que tu décris à l'air de ressembler à une donnée qui au départ serait correcte (en utf-8) et serait (à nouveau) encoder en php en utf-8, ce qui débouche sur des caractères plutôt bizarres.

C'est vraiment une idée comme ça, car ça m'est arrivé.
__________________
Win XP | WampServer 2.2 | Apache 2.2.21 | Php 5.3.8 | MySQL 5.5.16
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 13h51   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur développement logiciels
Inscription : août 2006
Messages : 10 052
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 052
Points : 16 359
Points : 16 359
Envoyer un message via MSN à CinePhil
Je veux bien mais les libellés des champs de formulaire sont en dur dans le code (avec lettres accentuées) et ce code est enregistré au format UTF-8 par Eclipse.

Si je supprime les deux lignes de code mentionnées dans le message précédent, j'ai les libellés bien affichés mais pas les données et si je les laisse j'ai les données OK mais pas les libellés !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 15h07   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 242
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 242
Points : 2 597
Points : 2 597
C'est peut être un piège ces 2 fonctions.

Je ne connais pas ZFW, du coup, difficile de t'aider sur ce coup là.

Je te donne quand même comment je procède, sait on jamais.

De mon coté, tout tient sur 4 choses.
- Je défini explicitement à mon éditeur du UTF-8 à chaque création de page
- Défini le charset des pages HTML (tu l'as déjà fais, donc c'est bon)
- Défini au niveau de Php
Code :
header('Content-Type: text/html; charset=UTF-8');
Un ini_set('default_charset', 'UTF-8') devrait fonctionner aussi je pense.

- Au niveau SQL, j'exécute en tout 1er (avant les autres) :


Il me semble pas avoir fait plus que ça.
A savoir aussi que j'ai la même configuration que toi, du utf8_general_ci.
__________________
Win XP | WampServer 2.2 | Apache 2.2.21 | Php 5.3.8 | MySQL 5.5.16
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Dernière modification par RunCodePhp ; 16/03/2010 à 15h25.
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 13h26.


 
 
 
 
Partenaires

Hébergement Web