| Auteur | |
|---|---|
| Ben5back | # 30 Jun 2009 - 21:08:30 |
| 12 Posts |
Salut à tous, J'ai voulu passer à l'UTF-8 pour mon dernier projet, et je ne m'en sors pas 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 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ée du film dans sa version IMAX sera de 2h35 a confirmé le producteur Jon Landau à l\'instar de sa version « longue » 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 é à 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 Modifié par Ben5back (30 Jun 2009 - 23:03) |
| Heyoan | # 30 Jun 2009 - 21:21:41 |
| 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 |
| 12 Posts |
Oui désolé, je n'avais pas vu qu'il y avait un forum spécialisé pour l'encodage & co 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 Par contre pour le contenu rien n'a changé. Toujours les équivalents html. Pourquoi cela ? <p style=\"text-align: justify;\">En effet, la durée du film dans sa version IMAX sera de 2h35 a confirmé le producteur Jon Landau à l\'instar de sa version « longue » de 3h09. Merci Modifié par Ben5back (30 Jun 2009 - 21:35) |
| Heyoan | # 30 Jun 2009 - 21:46:07 |
| Modérateur 7118 Posts |
Ben5back a écrit :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 |
| 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 |
| Heyoan | # 30 Jun 2009 - 21:53:55 |
| Modérateur 7118 Posts |
Ben5back a écrit :Ben non : Heyoan a écrit : |
| Ben5back | # 30 Jun 2009 - 21:56:13 |
| 12 Posts |
Ok mysql_real_escape_string ajoute les slashes, j'avais trop survolé la doc... |
| Heyoan | # 30 Jun 2009 - 22:09:57 |
| 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. |
| Ben5back | # 30 Jun 2009 - 22:10:43 |
| 12 Posts |
Non il n'est qu'en partie résolu. Pas de souci, je mettrais [Résolu] dans le titre 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) |
| Florent V. | # 30 Jun 2009 - 22:17:18 |
| Administrateur 17162 Posts |
Bonsoir, De mémoire, c'est FCKEditor qui s'amuse à remplacer tous les caractères non-ASCII par une entité HTML (é 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. |
| Ben5back | # 30 Jun 2009 - 23:02:55 |
| 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 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 |
Les références web : openweb.eu.org - opquast.com - webmaster-hub.com - webrankinfo.com - salemioche.net - web-pour-tous.org - webonorme.org
Nos partenaires : Editions Eyrolles