Bonjour,

Alors voilà j'ai un problème d'encodage, j'ai créé une base de données encodée en "utf8-general-ci", mes pages "php" sont encodés en "UTF-8", l'encodage de mon éditeur, "sublime text 2", est en "UTF-8" mais le problème c'est lorsque j'ajoute une phrase avec des caractères accentués, ceux-ci ne sont pas interprétés en "UTF-8" puisque par exemple le "à" est rempalcé par "Ã"...

Est-ce normal ?

Anthony

11 réponses


t0mweb
Réponse acceptée

Sur quelle plateforme travailles-tu: Mac, Windows, Linux?
La solution la plus connue est d'utiliser NotePad++ puis de convertir l'encodage. Si tu es sur une base unix, tu peux utiliser la commande iconv.
Sublime te permet de réouvrir un fichier avec un nouvel encodage "File > Reopen with Encoding > UTF-8" mais si tu as des accents dans ton fichier, il ne seront pas convertis et tu auras par exemple un ? à la place d'un é. Il faudra donc les remplacer manuellement...
Ca fait longtemps que je n'ai plus été confronté à ce genre de problème alors il y a peut être des logiciels ou des façons de faire plus simple et plus rapide, mais avant je procédais ainsi.

tonymx227
Auteur
Réponse acceptée

Je suis sur Mac et je développe avec Sublime Text 2 donc je vais essayer de faire "Reopen with Encoding > UTF-8" ;)

Si tout est en utf-8, il ne semble rester q'une possibilité : ton navigateur. As-tu du html dans ton code php? Si oui, vérifie que tu as bien la balise suivante (HTML5) :

<meta charset="utf-8">

Cela forcera ton navigateur à afficher le contenu en utf8, et non en iso qui est l'encodage par défaut en Europe.

Je ne travaille pas en HTML 5, mais en HTML 4.01 transitional...

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Comme tu préfères pour la version d'HTML, du moment que l'encodage est spécifié... Cela a-t'il résolu ton problème?

Non non, comme je t'ais spécifier dans le message précedent, je marque bien "charset=UTF-8" mais ça ne change rien, ça ne marche pas...

Le contenu accentué provient de la base de données ou directement du fichier ? Si il vient de la base de données, essaie ceci:

mysql_query("SET NAMES UTF8");

Sinon, je pencherai malgré tout pour un problème d'encodage au niveau du fichier...

Oui mais pourtant lorsque j'ai créé les tables j'ai spécifié l'encodage...

Exemple d'une table :

create table if not exists albums (
    id_album int not null auto_increment,
    nom_album varchar(45) not null,
    date_album datetime not null,
    desc_album text not null,
    statut_album int not null,
    primary key (id_album)
)ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

Je préfère ne pas utiliser "mysql_query("SET NAMES UTF8");", est-ce possible ?

Un problème d'encodage au niveau du fichier ? C'est à dire ? Sur sublime tu veux dire ?

Tu peux en effet te passer du SET NAMES UTF-8 mais pour les besoins des tests, si tes accents proviennent de la base de données, ce serait bien d'essayer afin de voir si cela corrige le problème ou non.
Pour le fichier, j'ai déjà eu des cas similaires ou je croyais le fichier en utf-8 mais en fait il ne l'était pas vraiment. Dans les paramètres de Sublime, il est précisé : "l'encodage à utiliser quand l'encodage ne peut être déterminé automatiquement". Si le fichier que tu as créé n'était pas en utf-8 lors de sa création, tu auras beau l'ouvrir sous Sublime avec un encodage par défaut en utf-8, ce fichier restera dans son encodage d'origine.

Je viens de trouver le paramètre sous sublime text 2 :

"fallback_encoding": "Western (Windows 1252)",

Il n'étais donc pas en UTF-8 lorsque j'ai créé les fichiers... Donc ça viens bien de ça, est-ce qu'il y a un moyen de réencoder tous mes fichiers en UTF-8 ?

Ok, et si ton problème est résolu, n'oublie pas de valider une réponse pour clore le sujet ;)