cs_christobal
Messages postés208Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 mars 2011
-
25 juin 2008 à 20:39
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 2008
-
2 juil. 2008 à 06:18
cs_christobal
Messages postés208Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 mars 2011 25 juin 2008 à 20:57
Hello,
je ne souhaite pas avoir une page en utf8 car rien n'est fait pour le gérer correctement.
je préférerais avoir les lettres sous cette form ( é è à ). Dans mon ca je doit les écrirent sous la forme : é => é
cs_christobal
Messages postés208Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 mars 2011 25 juin 2008 à 21:59
t'as raison.
mais c'est plus subtile que ca.
j'ai passé mon charset en UTF-8 et cela n'a rien changé fondamentalement sauf un fichier que j'appel avec un include qui lui m'affiche tj les accents sous forme de carré sauf si je rajoute <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> dans le fichier.
le pb et que je ne peux pas rajouter un charset dans chaque fichier que j'inclus, c'est pas fait pour ca.
Puis j'ai tenté avec l'utf-8, puis j'ai essayé toutes les combinaisons possibles avec des jeux de caractères mixtes. Sans résultat, quand bien même tous les autres sites fonctionnent normallement. Impossible d'ientifier l'origine du problème, cela fait ça en local sur toutes les machines et en ligne sur le serveur, donc ce n'est pas un problème de cache. On s'y est mis à plusieurs, mais rien à faire, impossible de trouver un semblant d'explication.
Du coup, j'ai dû laisser tomber et me résoudre à utiliser systématiquement les caractères spéciaux de HTML sous la forme &code; et donc d'utiliser la fonction htmlentities pour effectuer des sorties depuis PHP.
Et un jour, j'ai remarqué quelque chose qui m'a indiqué que c'était le PHP qui en est la cause. En effet, si je met le 'charset' du <meta ...> en iso, le code HTML brut ne fonctionne pas alors que les sorties du PHP marchent bien. et quand je le met en utf, c'est le contraire qui se produit. Soit c'est un problème de configuration du PHP, soit ce dernier bugue depuis sa version 5.
Je vais tâcher d'en savoir davantage et je vais reprendre les tests.
cs_christobal
Messages postés208Date d'inscriptionjeudi 3 octobre 2002StatutMembreDernière intervention31 mars 2011 29 juin 2008 à 11:21
Hello Farfadh,
merci pour ce retour très instructif.
A mont tour de te faire part de mes observations.
Historique : tout fonctionnais très bien et quelque soit l'encodage des caractères avec un charset=iso-8859-15 sur tt mes pages.
Puis j'ai décidé de rendre mon appli multi-langue et pour ca j'utilise un fichier fr.php avec des define.
Mon pb a commencé quand les txt contenu dans fr.php (inclus dans le fichier index.php) était affiché en UTF-8 donc si je mettais utf-8 dans le charset c'est les autres caractères (non contenu dans le fichier fr.php) qui partait en caouette.
Au contraire, le fichier fr.php d'un de mes modules qui se trouvait dans le 2éme sous répertoire ne posait aucun pb alors qu'il n'y avait aucune différence entre ces deux fichiers.
Donc bêtement j'ai créé un dossier langue_index que j'ai mis dans le 2éme sous répertoire et là tout fonctionne parfaitement.
Donc si je résume : fr.php associé a index.php => s'ils sont tous 2 dans le même dossier ca fonctionne mal. Alors que si je déplace fr.php dans => modules -> langue_index, cela fonctionne parfaitement.
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 20084 2 juil. 2008 à 04:32
Oui, j'ai moi aussi pensé au problème d'inclusion. Mes codes HTML et mes sorties PHP ne sont pas au même niveau d'inclusion dans mon site. Je vais orienter mes tests dans ce sens, il est possible que PHP se trompe de charset à un moment donné, parce que je pense que des caractères erronés sont envoyés au navigateur qui n'y est pour rien.
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 20084 2 juil. 2008 à 06:18
Ok, je viens de faire un test très intéressant.
En charset utf :
J'ai ajouté à un fichier 'code/main.php' le code :
<?php echo '<!--é'; echo ord('é'); ?>--><!--<?php ob_start(); ?>é<?php echo ord(ob_get_contents()); ?>-->
Et j'obtiens le résultat :
<!--é195--><!--é195-->
J'ai ajouté la même ligne de code dans le fichier 'code/smenu.php' qui est directement inclus dans le fichier précédent, et j'obtiens :
<!--?233--><!--?233-->
Le navigateur reçoit donc des données incorrectes. On dirait que PHP lit mal le deuxième fichier, ou que celui-ci est encodé en ISO.
Et ding ! Je viens de prendre un niveau en comprenant enfin ce mystérieux problème et en le résolvant de la manière suivante :
- je supprime le fichier 'code/smenu.php' après avoir copié son contenu
- je fais une copie du fichier 'code/main.php'
- je renomme la copie en 'code/smenu.php' en collant ce que j'avais dans mon presse-papier (le code du fichier que j'ai supprimé)
Et hop, ça marche comme un charme !
Le fichier 'code/smenu.php' en ISO, pour une raison que j'ignore encore. Avec ma manipulation, je l'ai en fait converti manuellement en UTF. Tous les fichiers du site n'ont pas été créé sur mon ordinateur de bureau mais depuis un ordinateur portable. Peut-être que la conversion s'est effectuée durant la copie via le réseau, je ne sais pas pour l'instant. Je continue à chercher...
Maintenant, il me faut un outil de conversion des jeux de caractères de mes fichiers. Ah, mon éditeur de texte sait le faire. Je force l'encodage des mes fichiers en UTF-8 et les problèmes d'accents disparaissent les uns après les autres. Et il semblerait que mon Windows crée des fichiers qui soient encodés en ANSI par défaut, ça ne m'étonne pas des masses, mais ce jeu de caractères est-il un dérivé de l'ISO ?
Une petite recherche et je trouve la réponse. Je savais déjà que DOS fonctionnait en ASCII et que ça posait des problèmes avec Windows qui lui était en ANSI. Ce dernier jeu de caractère se trouve être un ancêtre de l'ISO.
Pourquoi ce site en particulier a-t'il eu des problèmes alors ? Bah ce n'est pas moi qui ait réglé ce charset, ce mes collègues qui avaient les premiers constatés le problème et constataient que le site s'affichait preque entièrement correctement quand il était déclaré en UTF-8. Pour le reste des fichiers, ils ont utilisé les codes HTML &code;. J'avais tenté de résoudre cette situation, mais sans succès. En fait, je ne sais pas comment ils se sont débrouillés, mais ils ont encodés leurs sources en UTF-8... Avec Dreamweaver ! Mais oui, c'est ce logiciel qui a créé les premiers fichiers, il devait être configuré ainsi ! Quand à moi je suis passé derrière pour intégrer le code PHP avec mon éditeur de texte dans des fichiers que j'ai créé avec Windows (click droit -> nouveau -> document texte) donc en ANSI, et c'est là que sont apparus les problèmes d'accents. C'est le seul site dont je n'avais pas fait l'intégration HTML... à la main au bloc-notes. Tous les autres sites étaient en ANSI et déclarés en ISO.
Et bien, ça m'a pris du temps, mais ça vallait le coup. Quand je pense que DOS est tellement loin que j'avais oublié que les fichiers textes pouvaient être encodés dans des jeux de caractères différents. Mais c'est la faute de Windows aussi ! Il ne pouvait pas prévenir en affichant dans les propriétés des fichiers le jeu de caractères utilisé, plutôt que de cacher le fait qu'il fait une conversion automatique pour les lire et les enregistrer ? Merci pour vos expériences, sans quoi je n'aurais peut-être jamais repris mes tests et je serais resté dans l'ignorance.