Des livres incontournables pour tout maîtriser

  • CSS2
  • Réussir son site web avec XHTML et CSS
  • PHP 5 avancé
  • Memento CSS
  • Memento XHTML
  • Ergonomie web
  • Bien rédiger pour le web
Auteur
Ben5back
# 30 Jun 2009 - 21:08:30
Citer
12 Posts
Salut à tous,

J'ai voulu passer à l'UTF-8 pour mon dernier projet, et je ne m'en sors pas 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 cligne
Modifié par Ben5back (30 Jun 2009 - 23:03)

http://www.avatar-world-fr.com/ 
^
Heyoan
# 30 Jun 2009 - 21:21:41
Citer
Modérateur
7118 Posts
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)

^
Ben5back
# 30 Jun 2009 - 21:32:19
Citer
12 Posts
Oui désolé, je n'avais pas vu qu'il y avait un forum spécialisé pour l'encodage & co 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 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 biggrin
Modifié par Ben5back (30 Jun 2009 - 21:35)

http://www.avatar-world-fr.com/ 
^
Heyoan
# 30 Jun 2009 - 21:46:07
Citer
Modérateur
7118 Posts
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.

^
Ben5back
# 30 Jun 2009 - 21:49:18
Citer
12 Posts
D'accord, je vais tester ça, et est-ce que j'ai vraiment besoin d'utiliser la fonction addslashes avant l'enregistrement ?

Merci

http://www.avatar-world-fr.com/ 
^
Heyoan
# 30 Jun 2009 - 21:53:55
Citer
Modérateur
7118 Posts
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


^
Ben5back
# 30 Jun 2009 - 21:56:13
Citer
12 Posts
Ok mysql_real_escape_string ajoute les slashes, j'avais trop survolé la doc... cligne

http://www.avatar-world-fr.com/ 
^
Heyoan
# 30 Jun 2009 - 22:09:57
Citer
Modérateur
7118 Posts
Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. cligne

^
Ben5back
# 30 Jun 2009 - 22:10:43
Citer
12 Posts
Non il n'est qu'en partie résolu. Pas de souci, je mettrais [Résolu] dans le titre 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)

http://www.avatar-world-fr.com/ 
^
Florent V.
# 30 Jun 2009 - 22:17:18
Citer
Administrateur
17162 Posts
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.

http://fvsch.com 
^
Ben5back
# 30 Jun 2009 - 23:02:55
Citer
12 Posts
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 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 cligne

http://www.avatar-world-fr.com/ 
^
Powered by Phedio v3.8.6 beta in 8.6 ms © dew