8797 sujets

Développement web côté serveur, CMS

Situation 1 - En local sur serveur Apache (Situation "normale" !)
Editeur de code PHPEdit 3.6 - encodage des pages unicode utf-8
Serveur Apache, MySql, MySqlAdmin fournis par EasyPHP 3.1
Base de données charset utf-8 - Interclassement pour la connexion utf8_general_ci.

Balise meta commune à toutes les pages :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Mon navigateur (Firefox en général, mais tests faits aussi sur IE) interrogé au menu "Affichage => encodage de la page" me dit bien qu'il interprète des pages utf-8 !!!!
Toutes les données accentuées en provenance du code comme de la base de données sont affichées correctement.
L'instruction
$code = mb_detect_encoding($data);

renvoie bien UTF8 pour les "datas" comportant des caractères accentués et ASCII n'en comportant pas, ca qui me parait normal.

Situation 2 - Serveur distant Hébergeur mutualisé 1&1(...que je ne comprends pas
Le serveur travaille en PHP5 - Bases de données MySQL -
Transfert du site précédent en ftp.
Base de données vide créée pour Interclassement pour la connexion mySql en utf8_general_ci.
Tables crées en exportant structures et contenu des tables précédentes dans un fichier au format SQL à l'aide PHPMyAdmin, et en les important à l'aide de ce même fichier en SQL chez l'hébergeur toujours à l'aide de PHPMyAdmin. Les données relues paraissent toutes correctes et identiques aux précédentes.
Comme précédemment l'instruction
$code = mb_detect_encoding($data);

renvoie bien UTF8 pour les "datas" comportant des caractères accentués et ASCII n'en comportant pas, ca qui me parait normal.
Les données accentuées proposées par le code PHP qui génère la page sont correctement affichées
Mais les données accentuées provenant de la base de données sont remplacées par un losange noir avec un "?"
ce que je traduis par : "Le navigateur attend des données en utf-8, mais en réalité vous lui envoyez données codées en ISO"
De fait si à cet endroit j'ajoute une instruction
$code = mb_detect_encoding($data);

l'affichage est correct tant que je travaille sur le serveur de mon hébergeur.
Mais ce même code testé en local affiche au contraire des "é" prouvant qu'Apache ne retrouve plus es petits !
Mon navigateur (Firefox en général, mais tests faits aussi sur IE) interrogé au menu "Affichage => encodage de la page" me dit bien toujours qu'il interprète des pages utf-8 !!!!

Auriez-vous une idée de l'endroit où je me plante ?
Modifié par softdaemon (15 Jun 2010 - 11:43)
Salut

As-tu vérifier que tes tables sont créées en "utf8_general_ci" dans PHPMyAdmin chez 1and1 ?

@+

Naje83
Bonjour,

Pour définir l'encoding avec php :

// définir ini default_charset
ini_set('default_charset', "UTF-8");
// définir pour multi-bit 
mb_internal_encoding("UTF-8");


Pour mysql

SET NAMES 'utf8'


Une petite recherche dans la doc php et google donnes cela et trois cliques.

Smiley cligne
Hello,

Ca m'a tout l'air de venir de la base de données. Soit la base 1&1 directement, soit lors de ton transfert.

Comme dit au dessus, force bien UTF8 avec le SET NAMES.

Et si ça ne marche pas, tu peux faire un test en local, en réimportant ton export sql dans une autre base en local, et en voyant si tu peux les afficher correctement. Si ça marche pas, c'est ton transfert qui a déconné.

Accessoirement, si tu a utilisé phpMyAdmin pour faire ton export, ça peut venir de là aussi. Si tu peux, préfère l'export sous forme de fichier plutot que de faire un copier-coller manuel. Et si tu peux aussi, prèfère un logiciel de gestion de BDD (Navicat par exemple) pour l'export/import.

Sinon, et bien que je ne pense pas que ça ait de rapport, tu peux toujours rajouter dans un .htaccess un
AddDefaultCharset utf-8
, ça mange pas de pain.
Modifié par Tymlis (16 Jun 2010 - 10:48)