IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

galère encodage (ma bête noire) [Encodage]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut galère encodage (ma bête noire)
    Bonjour,

    Je suis actuellement en train de développer un petit module sous la forme de quelques pages php (avec mon fidèle notepad++). Ces pages s'intègrent dans notre site Internet développé par un prestataire.

    En gros, les utilisateurs devront y déclarer leurs chiffres chaque mois.
    Aussi, dans mon formulaire de déclaration, j'ai une liste déroulante (issue d'une fonction dans un fichier inclus fonctions.php, cf code ci-dessous) de 13 items (blanc par défaut + les 12 mois). Une fois le formulaire validé, il est représenté pour relecture, les champs sont les mêmes (liste déroulante pour les mois, donc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function ListeMois($lemois){
    $lesmois=array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"); //j'ai fait exprès de mettre tantôt les accentués en html, tantôt en dur pour tester
    $listemois = '<select id="fmois" name="fmois" onchange="change(this.select)">';
    foreach($lesmois as $valeur){
    	if ($lemois==$valeur) { 
    				$listemois .= '<option value="'.$valeur.'" selected="selected">'.$valeur.'</option>'; 
    			}
    			else {
    				$listemois .= '<option value="'.$valeur.'">'.$valeur.'</option>'; 
    			}
    		}
    		$listemois .= '</select>';
     
    	return $listemois;
    }
    Le problème, c'est que les mois avec accents (transmis en post) ne sont pas remis dans la liste
    Pour cause, si je fais un echo de la variable, j'ai un beau "Février"

    Donc un énième souci d'encodage...
    Sachant que :
    - mon prestataire m'a recommandé d'encoder mes pages php en iso-8859-1 (charset du serveur)
    - que le header (fourni par le prestataire) présente les pages en utf-8 (qui est donc l'encodage appelé par défaut par le navigateur)
    - que la base de données mysql est en utf8, interclassement latin_swedish_ci (mais là je ne fais même pas appel à la db pour cette liste... j'ai aussi des galères avec les valeurs en base mais ce sera un autre topic si je ne m'en sors pas :/)

    [edit] : précision, les mois sont TOUS bien écrits dans la liste déroulante (que ce soit février ou ao&ucirc;t dans l'array)

    Que puis-je tester pour arriver à mes fins (à part mettre mes mois sans accents ^^)

    Merci d'avance pour vos lumières,

    Bill

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprends pas bien ce que tu attends de nous : Tu sais toi même que tu travailles avec des encodages différents, donc tu ne peux pas être surpris d'obtenir des caractères mal écrits.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut
    Ben... est-ce que ce serait un mauvais conseil de mon presta que de m'inciter à encoder en 8859-1 (sous prétexte que c'est le charset par défaut de leur serveur) ?

    Parce que clairement j'ai des doutes quand je vois que le header html de toutes les pages du site contient :<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Mais comme les questions d'encodage ne sont pas mon fort et que je ne sais pas tout ce qui se passe sous le capot du site :/

    Je cherche des pistes de résolution... Mais si ça vous semble si évident, alors je vais reconvertir des pages en utf pour tester.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut
    Citation Envoyé par ibill Voir le message
    ...alors je vais reconvertir des pages en utf pour tester.
    Remis mes pages php en utf 8 sans BOM...

    Et bien c'est encore pire : ce sont des caractères encore plus cabalistiques qui se placent au lieu des caractères accentués

    Aucune trace d'utf dans mon phpinfo()...

    Ce que je comprends, c'est que la page étant présentée en utf 8, le renvoi d'une variable en post se fait aussi en utf8. J'ai bon ?
    Si c'est ça, et vu que je n'ai pas la main sur le "moteur" du site (c'est un back office propriétaire, mes développements le contournent...), ça sent le truffage de code avec des utf8_decode.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ce n'est pas pire, ça inverse le problème.

    Pour reprendre bien les choses :

    Si, comme dans ton exemple, tu écris "Février" dans le fichier .php et que tu obtiens

    - Février : c'est que ton fichier est en UTF8 mais que ton navigateur affiche de l'ISO
    si tu as déjà sur cette page une balise meta indiquant UTF8, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    - F�vrier : c'est que ton fichier est en ISO mais que ton navigateur affiche de l'UTF8
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 71
    Par défaut
    Erf, quand je dis "encore plus cabalistique", j'évoque le codage sur 4 octets d'un caractère accentué -> gégé

    L'ajout de la ligne du header ne change rien (je suppose que l'include du presta (qui contient le head et ses balises meta ainsi que les includes de base du site) que je ne peux visualiser ou modifier - fait déjà référence au charset utf8...

    Bon avec utf8_decode sur mes variables $post je vais arriver à quelque chose... un peu de gymnastique :/

    Mais je me pose toujours la question de la recommandation d'encodage en iso de pages présentées en utf8

    Et sinon encore une question : on est bien d'accord que si ma base est en utf8, je ne devrais jamais voir des "é" et consorts dans les données, n'est-ce pas ?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. moveRow : bête noire de FF
    Par linar009 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 28/08/2006, 11h03
  2. Encodages DOS et Windows
    Par Aramis dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2003, 17h55
  3. galère avec my2pg.pl
    Par fafet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/07/2003, 10h10
  4. Numéro auto ===== Question bête
    Par Nicos77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2003, 13h04
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo