UTF-8 en PHP et MYSQL

UTF-8 en PHP et MYSQL - PHP - Programmation

Marsh Posté le 11-09-2008 à 10:21:04    

Chers surfeurs,
je vous contacte car je me heurte depuis maintenant bien 2 jours à un problème particulièrement embêtant.
Je créée en ce moment un site franco-grec contenant donc des caractères latins et des caractères grecs, j'ai donc choisis l'encodage UTF-8 collapse utf-8_bin pour l'ensemble de mes pages et bases de données mysql
- Je travaille pour le moment sur PhpMyadmin et j'ai bien configuré le fichier httpd.conf, php.ini et my.ini pour que tout roule sur du utf8
 
- La totalité de mes pages contiennent l'en-tête suivant :  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
- La base et les table que j'utilise sont entièrement configurées en UTF-8 :
 
-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--  
-- Serveur: localhost
-- Généré le : Jeudi 11 Septembre 2008 à 10:50
-- Version du serveur: 5.0.27
-- Version de PHP: 5.2.0
--  
-- Base de données: `coop`
--  
 
-- --------------------------------------------------------
 
--  
-- Structure de la table `news`
--  
CREATE TABLE `news` (
  `id` int(4) NOT NULL auto_increment,
  `date` date NOT NULL,
  `text` text collate utf8_bin NOT NULL,
  `auteur` varchar(999) collate utf8_bin NOT NULL,
  `fr` text collate utf8_bin NOT NULL,
  `gr` text collate utf8_bin NOT NULL,
  `ge` text collate utf8_bin NOT NULL,
  `it` text collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=4 ;
 
 
- Mes enregistrement (notamment en caractères grecs) ont été correctement inséré au sein de phpmyadmin (j'ai bien vérifié l'encodage utf-8 de la page d'insertion avec firefox)
 
et MALGRES TOUT, lorsque je demande à ma brave page php de m'afficher la ligne de la table avec les caractère comme suit :
 
$requete = "SELECT * from news ORDER BY id DESC LIMIT 4";
$query = mysql_query($requete,$connection);
while ($row = mysql_fetch_array($query)) {
echo $row['gr']; }
 
 
J'obtient une succession de points d'interrogations :  
????? ????????? ????????????? ?????????? ???????? ??? ?????????? ??????????, ???? ???????? ???????? ??? ???????????????. ?????? ??? ?????! ????????? ?? ???????????? ???? ??? ?????????? ???????.
 
Tandis que le texte à l'origine était :
Ένωση Αγροτικών Συνεταιρισμών Χαλκιδικής ανανέωσε μια καινούργια ιστοσελίδα, όπου δέχονται αιτήσεις για προϋπολογισμούς. Ρίξετε μια ματιά! Ελπίζουμε να απολαμβάνετε αυτή την καινούργια διεπαφή.
 
Petite précision : le texte en grec s'affiche correctement dans PHPMyAdmin !!!
 
Je vous remercie d'ors et déjà de votre aide...

Reply

Marsh Posté le 11-09-2008 à 10:21:04   

Reply

Marsh Posté le 11-09-2008 à 10:38:30    

Vu que c'est une page en php, t'as pensé à rajouter l'encodage dans l'entête http :

Code :
  1. header('Content-Type: text/html; charset=utf-8');


Vérifie aussi que tu n'as pas indiqué plusieurs encodages différents dans le code html reçu par le navigateur ( par exemple dans une balise '<?xml version="1.0" encoding="iso-8859-1"?>' ne fait pas bon ménage avec un '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >')

Reply

Marsh Posté le 11-09-2008 à 10:44:07    

Oui bien sur j'ai un header inclue dans chacune de mes page qui contient la méta avec le charset utf-8, et je n'ai vraiment aucune balise qui pourrait faire conflit avec ma meta je te l'assure =)

Reply

Marsh Posté le 11-09-2008 à 10:51:59    

Bizarre. Ton navigateur il te dit que c'est quoi le codage actif?
 
Je viens de penser à un truc : on peut aussi indiquer l'encodage de la liaison avec la base de donnée. Pour mysql, ça se ferait avec la requête "SET NAMES utf8". Même si je ne pense pas que ça vienne de là, on ne sait jamais.

Reply

Marsh Posté le 11-09-2008 à 10:59:17    

Héhé, firefow indique bien unicode UTF-8 comme encodage actif,
et j'ai d'ors et déjà essayé de faire cette requête sous MySQL (j'ai écumé les forums, tutoriaux et fichiers d'aide depuis hier, avant d'avoir décidé de poser ma question ici)

Reply

Marsh Posté le 11-09-2008 à 11:43:32    

Tu parles des headers, de la base, mais tes pages PHP que tu ouvre avec ton éditeur de code elles sont enregistrées en UTF8 aussi ?

Reply

Marsh Posté le 11-09-2008 à 11:46:13    

Oui bien sur, j'édite avec Notepad++ que j'ai préalablement configuré en UTF8

Reply

Marsh Posté le 11-09-2008 à 11:53:08    

Petite indication les caractères spéciaux passent très bien avec un simple echo sur ma page php, mais dés que je veux prendre des lignes de la base mysql, les caractères ne passent pas (alors qu'ils sont bien inséré en UTF8 dans une base UTF8 et qu'ils apparaissent bien dans phpmyadmin). J'ai pensé que ca pouvait peut etre venir de ma requete SELECT ?

Reply

Marsh Posté le 11-09-2008 à 11:56:07    

Dumpe le résultat dans un fichier texte, pour voir si ça vient de PHP ou de l'interprétation du browser. Ouvre aussi ta page dans IE ou Opéra pour comparer avec FF.

 

EDIT : pour ton post juste au-dessus, le select ne va pas poser de problème a priori.


Message édité par Taiche le 11-09-2008 à 11:56:47

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 11-09-2008 à 11:59:24    

J'avais le même problème, essaie de mettre
mysql_query('SET NAMES utf8');
dans ta requête SQL.


---------------
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Reply

Marsh Posté le 11-09-2008 à 11:59:24   

Reply

Marsh Posté le 11-09-2008 à 12:00:30    

Ca donne le meme résultat avec IE, et le résultat : "? ????? ????????? ????????????? ?????????? ???????? ??? ?????????? ??????????, ???? ???????? ???????? ??? ???????????????. ?????? ??? ?????! ????????? ?? ???????????? ???? ??? ?????????? ???????." ne renvoit rien ni dans un fichier texte ni nul part (juste des points d'interrogation :))

Reply

Marsh Posté le 11-09-2008 à 12:02:24    

OK, donc c'est bien un pb soit de PHP, soit de la base de données :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 11-09-2008 à 12:03:41    

tholdan a écrit :

J'avais le même problème, essaie de mettre
mysql_query('SET NAMES utf8');
dans ta requête SQL.


 
C'était effectivemment la solution, je n'avais pas percuté, et seulement executé cette requete dans phpmyadmin

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed