Problème d'intégration de l'utf-8

Nouveau WRInaute
Bonjour,
je suis en train de mettre en place un site web utilisant l'utf-8.
J'ai un problème avec les accents...

Les accents sont remplacés par des "?", alors qu'ils apparaissent convenablement dans ma base de données.

Ma base de données est MySql, codée en utf-8, et j'ai bien mis l'entête :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
sur mes pages web,

J'ai regardé un peu sur Internet, mais je n'ai rien trouvé pour m'aider.
auriez-vous une idée?

Merci!!
 
Nouveau WRInaute
stefy a dit:
Les accents sont remplacés par des "?", alors qu'ils apparaissent convenablement dans ma base de données.

Réflexion faîte, je ne suis pas certaine que mes accents apparaissent correctement dans ma base ...
Si la BD est en utf-8, les accents doivent-ils apparaître en clair ou être représentés par des caractères bizarres ?
 
WRInaute occasionnel
phpmyadmin n'affiche pas correctement l'utf8 d'après mon expérience. Donc si tu vois tout bien, je pense que tu es en iso.
 
Nouveau WRInaute
:(
Je viens de lire plusieurs articles parlant de l'utf8.... mais ce n'est pas très clair tout ça.
http://www.envrac.org/index.php/2006/03/11/58-un-tutoriel-sur-le-character-encoding
http://www.siteduzero.com/tuto-3-62...caracteres-et-interclassements.html#ss_part_1 (pas encore lu, je dois regarder)


En gros, j'ai une interface d'administration, qui remplit une base de données.
Puis un site web qui interroge la dite base de données.
Rien de bien extraordinaire quoi!

Les pages contenant le formulaire ont bien la balise http-equiv avec charset="utf-8".
J'ai rajouté au cas où le header ('Content-Type: text/html; charset=utf-8');
Ma base est en utf-8, mais pas les "interclassements". Je sais pas trop à quoi cela correspond d'ailleurs. J'ai changé quelques champs pour les mettre en utf-8, mais cela ne marchait pas mieux.

Bref, je vais essayer de prendre un problème après l'autre, pour essayer de bien comprendre.

Comment savoir comment les caractères sont encodés dans la base de données ??? Comment en être certain ? Je pose la question car si j'ai bien compris, PhpMyAdmin fait sa propre interprétation.

MySQL: 4.1.10
phpMyAdmin - 2.9.0.2
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Interclassement : latin1_swedish_ci[/url]
 
WRInaute impliqué
peux être faut il se servir de l'attribut accept-charset pour spécifier l'encodage du submit du formulaire
W3C form
mais je suis pas sûr que IE en tienne compte, en tout cas sur un serveur iso ca doit aider
 
Nouveau WRInaute
Salut à tous,

Le problème peut venir aussi du fait que tes page soit enregistré en ANSI, ou ISO. Essaye de les enregistrer en UTF-8, c'est un facteur essentiel pour que l'UTF-8 fonctionne correctement.

Cordialement Inazo.
 
Nouveau WRInaute
Inazo a dit:
Le problème peut venir aussi du fait que tes page soit enregistré en ANSI, ou ISO. Essaye de les enregistrer en UTF-8, c'est un facteur essentiel pour que l'UTF-8 fonctionne correctement.

Mes pages contenant le code html et php ne sont en effet pas enregistrées au format utf-8.
Mais je ne comprends pas pourquoi elles le devraient.
Je pensais que cela avait de l'importance pour les pages qui contiennent du texte, et donc probablement des caractères accentués. Dans mon cas, comme tout le site est dynamique, les fichiers ne contiennent quasiment que du php.
Faut-il vraiment que je les réenregistre toutes :( ?

Sinon, le tutoriel
http://www.siteduzero.com/tuto-3-62...caracteres-et-interclassements.html#ss_part_1
est vraiment très bien fait.
Ca permet de comprendre pas mal de choses. A lire absolument.

Bon, je vais repartir à 0, me faire des pages de test, avec une base vierge, et essayer de mieux comprendre le problème.

J'essaierai aussi l'attribut accept-charset tant que j'y suis.
Je n'avais rien lu à ce sujet jusqu'à présent.

MErci

[/url]
 
Nouveau WRInaute
C'est là que tout le monde se trompe certes c'est du php mais encodé en UTF-8 donc il s'attend à avoir de l'UTF-8.

Pour que l'UTF-8 fonctionne sans soucis il faut utiliser l'UTF-8 partout, la base de données, les pages, et l'os.

Cordialement Inazo.
 
Nouveau WRInaute
D'accord,
merci Inazo.

J'utilise PSpad.
J'ai fait des essais pour convertir une page existante au format ISO en une page au format UTF8, en changeant uniquement le format (onglet format je veux dire), mais cela ne fonctionne pas. :cry:
J'ai fait pour ça une bête page html qui affiche des accents.

Heureusement, j'ai trouvé la solution ici :

http://www.gnunux.info/dotclear/index.php?2005/08/28/45-convertir-un-fichier-iso-en-utf8
et cela fonctionne :lol:

Je vais donc commencer par convertir toutes mes pages, mais ça va aller vite avec cette ligne de commande !
# iconv -f iso8859-1 -t utf8 fichier -o fichier2
 
Nouveau WRInaute
Merci pour les encouragements,
je viens de terminer la première étape:
conversion des fichiers au format utf8.
J'ai fait un shell pour tous les modifier. Ca m'a pris un peu de temps car cela faisait quelques années que je n'avais pas fait de shell. J'aurais du mieux chercher sur Google car après coup, j'ai vu qu'il y avait déjà des programmes dispos .... mais bon.
Pour ceux que ça intéresse, voici le code de mon shell :
if [ ! $1 ]
then
repertoire="."
else
repertoire=$1
fi
if [ ! $2 ]
then
encodage_sortie="utf8"
else
encodage_sortie=$2
fi

echo "CONVERTION DES FICHIERS AU FORMAT $encodage_sortie"
echo "REPERTOIRE d'ANALYSE : $repertoire"

for i in `ls -AB $repertoire`
do
if [ -f $repertoire/$i ]
then
# encodage du fichier ?
encodage=`file -i $repertoire/$i|grep "charset"|cut -d"=" -f2`
if [ "$encodage" != "" ]
then
echo "$repertoire/$i - ENCODAGE : $encodage"
if [ "$encodage" != "$encodage_sortie" ]
then
echo "iconv -f $encodage -t $encodage_sortie $repertoire/$i -o $repertoire/$i.$$"
echo "mv -f $repertoire/$i.$$ $repertoire/$i"
## convertion au nouveau format
iconv -f $encodage -t $encodage_sortie $repertoire/$i -o $repertoire/$i.$$
## suppression de l'entete BOM
sed -i -s -e '1s/^\xef\xbb\xbf//' $repertoire/$i.$$
## on valide le fichier
mv -f $repertoire/$i.$$ $repertoire/$i
fi
fi
echo "------------------------------"
else
repertoire_crt=`echo $i|cut -d":" -f1`
/bin/sh $0 "$repertoire/$repertoire_crt" $encodage_sortie
fi
done
exit 0

Ce programme convertit tous les fichiers d'un répertoire donné, en parcourant les sous-répertoires éventuels, de leur format actuel vers un format de sortie.
Premier paramètre : répertoire à parcourir, réertoire courant par défaut
Second paramètre : encodage de sortie, utf8 par défaut

Attention, cela ne marchera pas si vous avez des noms de fichiers ou de répertoires avec des espaces, mais bon, c'est pas bien de mettre des espaces dans les noms de toute façon, mauvaise habitude :wink:

Il y a une ligne très pratique qui permet de virer cette p----- d'entête BOM des fichiers, sinon, il n'y a plus rien qui marche. J'en ai fait la triste expérience.

Pour ceux qui utiliseront ce code, merci de travailler sur une copie de vos fichiers, je ne veux pas être tenue responsable de tout problème qui pourrait se produire

:lol:


Bon, je m'attaque aux bases de données maintenant!
 
Nouveau WRInaute
PSPAD ...

Ah oui, une dernière chose.....
J'utilise(ais) PSPAD, dont j'ai toujours été très satisfaite jusqu'à aujourd'hui ...
Le problème est que PSPAD ne gère pas correctement le format utf8. Il ne propose pas de version utf8 sans BOM !

Si j'ouvre mon fichier.php au format utf8 sans BOM, et que je le modifie sous PSPAD, il me rajoute l'entête BOM systématiquement :x :x
Et alors bien sûr, plus rien ne marche.

J'ai installé la dernière version PSPAD 4.5.2, mais le problème est toujours là!

Je vais passer sous Notepad++ qui apparemment gère ça très bien.
 
Discussions similaires
Haut