Salut à tous,

J'ai voulu passer à l'UTF-8 pour mon dernier projet, et je ne m'en sors pas Smiley murf J'ai fouiné un peu partout sur le web pour trouver des solutions, j'ai ajouté des fonctions ici et là, mais rien à faire... je nage complètement...

Avant tout voici les config :

MySQL :
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Interclassement pour la connexion MySQL: utf8_general_ci
La base est en utf8_general_ci
Les tables sont en utf8_general_ci
Les champs sont en utf8_general_ci

Connexion à MySQL :
$base = mysql_connect ('', '', '');
mysql_select_db ('', $base);

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

PHP :
header HTTP en UTF-8 : header('Content-type: text/html; charset=UTF-8');


Je prends l'exemple de mon script de news. J'utilise le FCKeditor pour le champ "contenu".
Voici le code php qui me permet de récupérer le contenu de mes deux champs :

$titre = addslashes(htmlspecialchars($_POST['titre'], ENT_COMPAT, 'UTF-8')); // input tout à fait normal
$contenu = addslashes($_POST['contenu']); // FCKeditor


Ensuite, c'est enregistré dans la table "news". Et c'est là que le problème se pose.

Si par exemple j'ai saisie comme titre : Conférence de presse à l'E3, quand je vais dans phpMyAdmin j'ai d'enregistré : Conférence de presse à l\'E3

Mon contenu lui ressemble à ça une fois enregistré :

<p style=\"text-align: justify;\">En effet, la dur&eacute;e du film dans sa version IMAX sera de 2h35 a confirm&eacute; le producteur Jon Landau&nbsp; &agrave; l\'instar de sa version &laquo;&nbsp;longue&nbsp;&raquo; de 3h09.


Donc j'imagine que d'avoir un "é" à la place de "é" n'est pas vraiment normal. Et pareil pour le contenu, est-ce normal d'avoir &eacute; à la place de "é", vu que je suis en UTF-8 (enfin de pense l'être) je devrais avoir les caractères accentués enregistrés tel quel, non ?

Par contre l'affichage des données se fait très bien, bizarrement...

Merci d'avance pour votre aide Smiley cligne
Modifié par Ben5back (30 Jun 2009 - 23:03)
Hello et bienvenue,

(sujet déplacé).

Il faudrait commencer par lire l'annonce de ce salon.

Ensuite il faudrait essayer de rajouter juste après la connexion à la base
mysql_query("set names utf8")
pour spécifier l'encodage de la connexion avec mysql.
Modifié par Heyoan (30 Jun 2009 - 21:22)
Oui désolé, je n'avais pas vu qu'il y avait un forum spécialisé pour l'encodage & co Smiley cligne

Merci pour le lien, j'y ai été faire un tour avant de poster, mais je n'ai pas trouvé de solution à mon problème.

Donc j'ai ajouté mysql_query("set names utf8") et désormais les accents sont enregistrés tel quel dans la table. Merci Smiley smile

Par contre pour le contenu rien n'a changé. Toujours les équivalents html. Pourquoi cela ?

<p style=\"text-align: justify;\">En effet, la dur&eacute;e du film dans sa version IMAX sera de 2h35 a confirm&eacute; le producteur Jon Landau&nbsp; &agrave; l\'instar de sa version &laquo;&nbsp;longue&nbsp;&raquo; de 3h09.


Merci Smiley biggrin
Modifié par Ben5back (30 Jun 2009 - 21:35)
Ben5back a écrit :
Toujours les équivalents html. Pourquoi cela ?
Sans doute parce que tu utilises, à un moment ou à un autre, htmlentities alors que normalement il suffit d'utiliser mysql_real_escape_string au moment d'enregistrer les données dans la base et htmlspecialchars au moment de les afficher dans une page web.
D'accord, je vais tester ça, et est-ce que j'ai vraiment besoin d'utiliser la fonction addslashes avant l'enregistrement ?

Merci
Ben5back a écrit :
est-ce que j'ai vraiment besoin d'utiliser la fonction addslashes avant l'enregistrement ?
Ben non :
Heyoan a écrit :
normalement il suffit d'utiliser mysql_real_escape_string au moment d'enregistrer les données dans la base
Non il n'est qu'en partie résolu. Pas de souci, je mettrais [Résolu] dans le titre Smiley cligne

J'ai regardé tout mon code et je n'ai pas un seul htmlentities. J'ai regardé également dans un fichier de config du FCKeditor, et rien de cela non plus. Est-ce qu'une autre fonction pourrait poser problème ?
Modifié par Ben5back (30 Jun 2009 - 22:11)
Bonsoir,

De mémoire, c'est FCKEditor qui s'amuse à remplacer tous les caractères non-ASCII par une entité HTML (&eacute; par exemple) correspondante. TinyMCE fait de même. Dans un cas comme dans l'autre, ça peut peut-être se régler dans la configuration de l'éditeur JS en question.
J'ai trouvé !!! En fait il faut modifier le fichier /fckeditor/fckconfig.js

A la ligne 65 :
FCKConfig.ProcessHTMLEntities	= false ;


Par défaut, il est true, il suffit de le passer en false. J'espère que cela aidera d'autres codeurs Smiley cligne

J'ai un autre problème, mais je pense qu'il est plus judicieux de créer un autre sujet, ça n'a pas trop de rapport.

Merci pour votre aide Smiley cligne