|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Bonjour amis développeurs
Pour commencer, je m'excuse mais malgré l'intitulé connu sur ce forum (et bien d'autres), et après moultes et moultes recherches croyez-moi, je n'ai encore trouvé à cette heure aucune discussion concernant exactement le problème auquel je suis confronté... J'ai tout d'abord cru que mon soucis venait de l'encodage de mes bases de données, qui est en utf8_general_ci, mais il n'en est rien en fait Donc... Primo j'ai un formulaire utilisateur (le bête formulaire pour que le gars qui surfe sur mon site puisse poster un message sur le forum...), jusque là aucun problème. Code :
Code :
Là ou ça a commencé à dérailler, c'est quand j'ai regardé le contenu de ma base de données la première fois... Le symbole € était remplacé par le fameux %u20AC (même plus besoin de chercher le code, je commence à le connaitre par coeur...) ! Je suis donc remonté un peu dans la chaine d'enregistrement, et je me suis aperçu donc que sur le fichier PHP appelé par AJAX qui traite l'info, mon symbole € n'apparait pas comme il faut... Toujours ce fichu %u20AC ! Donc afin de vous éclairer sur mon environnement, déjà, je travaille sur Firefox (toutes mises à jour faites), mais le soucis apparait également sur Chrome ou IE<last>... Ma page HTML débute par un DOCTYPE pour HTML5, et j'utilise la balise méta suivante (et j'y tiens) : Code :
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" /> et côté "template", le code suivant : Code :
<?xml version="1.0" encoding="ISO-8859-15" ?> Côté Javascript sur le traitement AJAX, j'ai un "escape( )" pour mettre en forme les données à envoyer au script... Si je l'enlève c'est encore pire (normal)... Si vous avez une solution, une piste, un rien qui puisse m'aider, je vous en remercie d'avance ! |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
Citation:
![]() Citation:
Code :
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" /> Code :
<?xml version="1.0" encoding="ISO-8859-15" ?> Tu peux toujours essayer d'utiliser utf8_decode() après récupération dans la base...
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Salut Bovino, merci pour ta réponse, je vais étudier ça
Je viens de faire un nouveau test... Dans ma base de données toujours en utf8_general_ci, je rentre manuellement le symbole € dans le corps du message (et il est bien pris en compte dans l'affichage avec phpmyadmin). Accrochez-vous : à l'affichage sur le site il faut que je sois en ISO-8859-1, sinon le symbole € ne s'affiche pas (losange avec '?' en utf8 et carré bizarre en ISO-8859-15)... Or si je ne me trompe pas, le symbole € est censé être pris en compte A PARTIR de ISO-8859-15, pas par ISO-8859-1... Non ? Cela pourrait-il venir de mon DOCTYPE pour HTML5 ? |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Jérôme PillietÉtudiant Inscription : mai 2011 Messages : 190 ![]() |
AJAX utilise l'UTF8 (du au XML), pas l'ISO, donc il te faut convertir ...
Le problème, c'est que la majorité des fonctions ne permettent que la conversion UTF8 <-> ISO-8859-1 Vu que tu tiens énormément à rester en ISO (=/), Il faut faire un traitement particulier pour les caractères qui ne sont pas ISO-8859-1 ... |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
|
|
|
00
|
|
|
#6 | |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
Citation:
![]() Passez à l'UTF-8 sans manquer une étape
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
|
00
|
|
|
#7 | |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Citation:
Sinon pour l'encodage de mon fichier, j'avoue que j'ai du mal à comprendre en quoi le fait d'enregistrer en UTF8 change quelque chose étant donné que je spécifie un charset à ma page HTML, et que mes fichiers de template (contenant donc mon code HTML + texte brut) sont chargés via PHP... Merci pour ton lien |
|
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Jérôme PillietÉtudiant Inscription : mai 2011 Messages : 190 ![]() |
Le fichier php/html/... sont de simples fichiers ...
Ils ont leur propre encodage ... Et n'ont aucun rapport avec une balise (ou autre) écrite dans ce fichier ... La balise va dire à html "tiens, mes données sont comme ça" ... Il faut donc que le fichier soit aussi dans cette encodage ... Passer en UTF8 te permet d'avoir la quasi totalité des caractères de ce monde (japon/russe/chine/...) (il existe jusqu'à UTF32 ... mais osef )Le seul soucis reste PHP qui n'est pas natif pour UTF8 ... Mais avec un peu d'huile de coude ça passe nickel |
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Merci pour les explications (ton lien Bovino m'a bien aidé), j'avoue avoir du mal encore avec les histoires d'encodage
Je viens de tout passer en utf8, j'ai encodé mes fichiers en UTF8 dans Notepad++, ça marche... J'ai également rajouté la ligne au niveau de mes requêtes SQL (j'ai une classe qui me gère ça donc aucun soucis de devoir le faire sur tous mes fichiers). Les données qui sont déjà en base sont bien lues et apparaissent correctement. Seul hic, j'ai un autre soucis maintenant : tous les accents que je saisis dans mon message n'apparaissent plus quand ils sont enregistrés en bdd, ça me coupe même tout ce qui est après le premier accent... Désolé mais je commence à perdre un peu les pédales là, je ne sais plus trop ou donner de la tête |
|
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Jérôme PillietÉtudiant Inscription : mai 2011 Messages : 190 ![]() |
L'encodage c'est pas une chose simple =/
On peut voir la façon dont tu écris et récupères dans la BDD, comment tu écris dans l'html, ... ? Je te passes un petit fichier que j'avais fait pour m'aider pour l'encodage (fait maison et avec des bouts trouvés par ci par là sur le net ^^) Peut être te sera t-il utile à toi aussi ^^ |
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Me revoici par là
Donc... Par où commencer ? ![]() Déjà, je travaille en PHP objet, donc j'ai une première classe qui instancie la base du site... J'ai donc ensuite pour une page xxx demandée, un fichier xxx.php qui contient les sources, et un fichier xxx.tpl qui contient la mise en page (le truc classique du système de template quoi Pour tout ce qui est des requêtes SQL, j'ai une classe qui gère tout, dans laquelle j'ai intégré la ligne de commande dont on parlait plus haut : mysql_set_charset ('utf8'); J'utilise bien entendu cette même classe pour ce qui est de lire dans la base de données... Pour ce qui est de la compilation du code HTML généré, j'ai donc mon fichier .tpl contenant des {VARIABLE} que je viens remplacer par la donnée requise via le fichier PHP et une nouvelle classe que j'ai nommée "Afficheur" (qui s'occupe de tout le tintouin de compilation). Chaque fichier .tpl est chargé avec la méthode "file_get_contents" de PHP. Ce n'est pas que je ne veuille pas mettre mes codes ici, puisque je n'ai fait que m'inspirer de codes et de méthodes existants, mais ce serait surement lourd et indigeste ! Je vais regarder ton fichier brachior, merci encore à tous |
|
|
00
|
|
|
#12 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Bon, un exemple concret de mon code. Sur chaque formulaire de message, j'ai un bouton "Prévisualiser", que je traite en AJAX.
Voici le code PHP du script appelé par AJAX : Code :
Code :
Le Javascript en callback ne s'exécute pas car le XML est "mal formé" vu qu'il contient des caractères chelous, carrés blancs et autres losange à '?'... J'ai testé un Code :
$texte = utf8_decode ($_POST['texte']); Pour charger mon fichier .tpl, j'utilise le code suivant (ici tiré de ma classe, donc ce n'est que l'essentiel, le reste n'est que vérifications et conditions) : Code :
Petite précision : sous Notepad++ j'ai encodé et enregistré tous mes fichiers (sources, classes, templates) en UTF-8 sans BOM... J'en perd mon latin (enfin plutôt mon UTF-8 ) là, je craque |
||||||
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Bon je suis un boulet, j'ai rajouté un p'tit htmlentities et mes accents sont passés...
Tout fonctionne donc correctement en UTF-8 (hormis le fait que ma base de données va devoir subir quelques agrandissements vu que chaque caractères spécial est enregistré par son code html &eaigu; et patata...) ! Mon problème initial reste cependant toujours présent : ce fichu € ne passe pas, il est toujours remplacé par le %u20AC |
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() Jérôme PillietÉtudiant Inscription : mai 2011 Messages : 190 ![]() |
Comme dit précédemment,
Les méthodes de conversions ramènent à l'ISO-8859-1 (qui ne possède pas le symbole € par exemple), Il te faut les traiter "à la main" ... Regarde les fonctions que je t'ai données (utf8_real_encode - utf8_real_decode) Elles doivent faire le boulot normalement ^^ |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2011 Messages : 29 ![]() |
Mouarf, j'avais oublié ce détail.... Merci brachior !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com